Так что я вижу людей , используя .build
, .create
и .create!
в своих контроллерах все больше и больше в последнее время. В чем разница с использованием .new
и передачей объекта param'd, а затем .save
? Есть ли плюсы и минусы? Использование этих других методов дает преимущества?
ruby-on-rails
Тим Найт
источник
источник
Хотя это правильно, что
create
вызовы,new
а затемsave
есть большая разница между двумя альтернативами в их возвращаемых значениях.Save
возвращает либоtrue
или вfalse
зависимости от того, был ли объект успешно сохранен в базе данных или нет. Это может затем использоваться для управления потоком согласно первому примеру в вопросе выше.Create
вернет модель независимо от того, был ли объект сохранен или нет. Это имеет значение для приведенного выше кода в том, что верхняя ветвьif
оператора всегда будет выполняться, даже если объект не прошел валидацию и не был сохранен.Если вы используете
create
логику ветвления, вы рискуете молчаливых сбоев, что не так, если вы используетеnew
+save
.create!
не страдает от той же самой проблемы, поскольку это поднимает и исключение, если запись недействительна.create
Альтернатива может быть полезной в контроллерах , гдеrespond_with
используются API (JSON / XML) ответы. В этом случае наличие ошибок в объекте приведет к тому, что ошибки будут возвращены в ответе со статусомunprocessable_entity
, который является именно тем, что вы хотите от API.Я бы всегда использовал опцию
new
+save
для html, особенно если вы полагаетесь на возвращаемое значение для управления потоком.источник
# Создать более короткую версию новой и сохранить. #Создайте! создает исключение, если проверка не была положительной.
источник
Я бы второй ответ выше. Кроме того
create
, нельзяfalse
приводить в качестве аргумента, что вы можете сделать сsave
. Передачаfalse
в качестве аргумента пропустит все проверки рельсовисточник