Хотя верно, что create
вызывает new
, а затем save
, существует большая разница между двумя альтернативами в их возвращаемых значениях.
Save
возвращает либо true
, либо false
в зависимости от того, был ли объект успешно сохранен в базе данных или нет. Затем это можно использовать для управления потоком согласно первому примеру в приведенном выше вопросе.
Create
вернет модель независимо от того, был ли объект сохранен или нет. Это имеет значение для приведенного выше кода в том, что верхняя ветвь оператора if
всегда будет выполняться, даже если объект не прошел валидацию и не был сохранен.
Если вы используете create
с логикой ветвления, вы рискуете молчать сбои, что не так, если вы используете new
+ save
.
create!
не подвержен той же проблеме, что и возникновение, и исключению, если запись недействительна.
Альтернатива create
может быть полезна в контроллерах, где respond_with
используется для ответов API (JSON / XML). В этом случае наличие ошибок на объекте приведет к тому, что ошибки будут возвращены в ответе со статусом unprocessable_entity
, что является именно тем, что вы хотите от API.
Я бы всегда использовал опцию new
+ save
для html, особенно если вы полагаетесь на возвращаемое значение для управления потоком.