Ответы:
Реализация REST для новых и созданных в Rails трактуется по-разному.
HTTP GET to /resources/new
предназначен для отображения формы, подходящей для создания нового ресурса, что он делает, вызывая новое действие в контроллере, который создает новую несохраненную запись и отображает форму.
HTTP POST /resources
принимает запись, созданную как часть нового действия, и передает ее в действие create внутри контроллера, которое затем пытается сохранить ее в базе данных.
Из ActiveRecord :: Базовая документация:
создать (атрибуты = ноль) {| объект | ...}
Создает объект (или несколько объектов) и сохраняет его в базе данных, если проверки пройдены. Полученный объект возвращается независимо от того, был ли объект успешно сохранен в базе данных или нет.
new (attribute = nil) {| self if block_given? | ...}
Новые объекты могут быть созданы как пустые (не передавая параметр построения) или предварительно заданные с атрибутами, но еще не сохраненные (передайте хеш с именами ключей, соответствующими именам столбцов связанной таблицы). В обоих случаях допустимые ключи атрибутов определяются именами столбцов связанной таблицы - следовательно, вы не можете иметь атрибуты, которые не являются частью столбцов таблицы.
Таким образом, create
создается новый объект, проверяется его, а затем сохраняет его в базе данных. И new
только создает локальный объект, но не пытается проверить или сохранить его в БД.
New создает новый экземпляр Model, но он не сохраняется до тех пор, пока не будет вызван метод save.
Create делает то же самое, что и new, но также сохраняет его в базе данных.
Иногда вы хотите что-то сделать перед сохранением чего-либо в базе данных, иногда вы просто хотите создать и сохранить это сразу.
RESTful части Rails очень близки к тому, как работает протокол HTTP. В протоколе HTTP запрос GET не должен изменять какие-либо данные. Логически, если вы посмотрите, как все действия RESTful в Rails работают, они будут совпадать с действиями HTTP. POST предназначен для генерации новых данных, поэтому он логически создается. Вы используете GET для предоставления формы версии этого или, другими словами, нового действия. Index и show также являются GET, update - это PUT (или PATCH в Rails 4+), а destroy - это DELETE в HTTP.
Кроме того, он прекрасно разделяет логику в контроллере и дает вам плавный способ устранения ошибок (путем повторного рендеринга нового действия с сообщениями об ошибках).
"You use a GET to serve the form version of that or in other words, the new action"
спасибо за ответ, но лично я нахожу это соглашение об именах действительно запутанным