Ссылка NullReferenceException или Object, не установленная на экземпляр объекта, возникает, когда объект класса, который вы пытаетесь использовать, не создается. Например:
Предположим, что у вас есть класс с именем Student.
public class Student
{
private string FirstName;
private string LastName;
public string GetFullName()
{
return FirstName + LastName;
}
}
Теперь рассмотрим другой класс, в котором вы пытаетесь получить полное имя учащегося.
public class StudentInfo
{
public string GetStudentName()
{
Student s;
string fullname = s.GetFullName();
return fullname;
}
}
Как видно из вышеприведенного кода, оператор Student s - объявляет только переменную типа Student, обратите внимание, что класс Student не создается в этой точке. Следовательно, когда выполняется выполнение инструкции s.GetFullName (), она выкинет исключение NullReferenceException.
Любой объект, который вы хотите, чтобы пользователи могли получать доступ через URI и выполнять операции CRUD (или некоторые его подмножества), можно рассматривать как ресурс. В смысле Rails это в целом таблица базы данных, которая представлена моделью и действует через контроллер.
Например, у вас может быть ресурс User
(с таблицей users
в вашей БД). Это представлено моделью User
, которая сопоставляется с users_controller
с map.resources :users
(которая затем генерирует маршруты, такие как /users
(коллекция пользовательских ресурсов) и /users/1
(определенный пользовательский ресурс).
Вы воздействуете на эти ресурсы, используя соответствующий метод HTTP при вызове этих ресурсов. POST
в коллекции ресурсов (/users
) создает новую запись, GET
извлекает список ресурсов (/users
]) или конкретный пользователь (/users/1
). PUT
обновляет определенного пользователя (/users/1/
), а DELETE
уничтожает этого пользователя. URL-адреса являются одинаковыми, но результат (и действие контроллера) может быть различным основанный на HTTP-глаголе. Идея заключается в том, что /users/1
всегда означает «я взаимодействую с пользователем, у которого есть ID # 1», независимо от действия.
откройте папку с вашей моделью, это намек на то, какие у вас есть ресурсы! пример: пользователи, картинки, комментарии ...
Вот хорошая статья , в которой обсуждается, как большинство разработчиков считают, что «Ресурс» является сингулярным с таблицей базы данных, аргумент, я думаю, заключается в том, что сопоставление с ресурсом сопоставляет контроллер с этой таблицей базы данных (или, с ActiveResource, на другой URL REST).
В принципе, я считаю, что «ресурс» - это «сохраненные данные». map.resources
отображает 7 RESTful действий в определенный набор сохраненных данных.
Но я не слишком много думал об этом. Хороший вопрос!
Я думаю, что они, вероятно, имеют в виду это в общем смысле сети, т. е. Resource (Web) :
референт любого унифицированного идентификатора ресурса
blockquote>Я не думаю, что это имеет какое-либо отношение к таблицам базы данных.
Многие люди говорят, что ресурсы относятся к имеющимся таблицам базы данных. Иногда это может быть правдой, но не всегда верно. Я мог бы привести много примеров, когда у вас нет соответствующей таблицы в вашей базе данных для определенного ресурса. Следовательно, assosociating его с таблицами является довольно неправильным.
Я бы определил ресурс как маршрут, который отображает связанные запросы. Поэтому вместо объявления отдельных маршрутов для действий, которые вы хотите сделать, вы можете просто объявить их с помощью изобретательного маршрута. В Rails находчивый маршрут обеспечивает сопоставление между HTTP requests
и URLs
до controller actions
.
Итак, скажите, что вы определили resources :users
в config/routes.rb
. Теперь вы можете использовать несколько помощников для контроллеров вашего приложения, например edit_user_path
, который возвращает users/edit
.