Rails new vs create
Почему существует необходимость в определении нового метода в контроллере RESTful, выполните его с помощью метода create?
Поиск Google не предоставил мне ответ, который я искал. Я понимаю разницу, но вам нужно знать, почему они используются так, как они есть.
Ответы
Ответ 1
В Rails-реализации REST new и create обрабатываются по-разному.
HTTP GET to /resources/new
предназначен для рендеринга формы, подходящей для создания нового ресурса, который он делает, вызывая новое действие в контроллере, которое создает новую несохраненную запись и отображает форму.
HTTP POST to /resources
берет запись, созданную как часть нового действия, и передает ее в действие create внутри контроллера, которое затем пытается сохранить его в базе данных.
Ответ 2
В документации ActiveRecord:: Base:
create (attributes = nil) {| object |...}
Создает объект (или несколько объектов) и сохраняет его в базе данных, если проходят проверки. Получаемый объект возвращается, был ли объект успешно сохранен в базе данных или нет.
new (attributes = nil) {| self if block_given? |...}
Новые объекты могут быть созданы как пустые (не передают конструктивный параметр) или предварительно заданы с атрибутами, но еще не сохранены (передайте хэш с именами ключей, соответствующими именам столбцов соответствующих таблиц). В обоих случаях действительные ключи атрибутов определяются именами столбцов связанной таблицы, поэтому вы не можете иметь атрибуты, которые не являются частью столбцов таблицы.
Итак create
создает экземпляр нового объекта, проверяет его и затем сохраняет в базе данных. И new
создает только локальный объект, но не пытается проверить или сохранить его в БД.
Ответ 3
Новый экземпляр экземпляра новой модели, но он не сохраняется до тех пор, пока не будет вызван метод сохранения.
Создать делает то же, что и новый, но также сохраняет его в базе данных.
Иногда вы хотите делать что-то, прежде чем сохранять что-то в базе данных, иногда просто хотите создать и сохранить его сразу.
Ответ 4
RESTful части Rails сделаны очень близко к тому, как работает протокол HTTP. В HTTP-протоколе запрос GET не должен изменять какие-либо данные. Логически, если вы посмотрите, как работают все действия RESTful в Rails, они будут соответствовать действиям HTTP. POST предназначен для создания новых данных, поэтому он логически создается. Вы используете GET, чтобы обслуживать версию формы этого или, другими словами, новое действие. Индекс и показ также являются GET, обновление представляет собой PUT (или PATCH в Rails 4+), а destroy - это DELETE в HTTP.
Кроме того, он прекрасно разделяет логику в контроллере и дает вам гладкий способ справиться с ошибками (путем повторного рендеринга нового действия с сообщениями об ошибках).