Различия между ними.строить.,создавать и.создать! и когда их следует использовать?

Итак, я видел, как люди используют .строить. ,создавать и. создать! в последнее время все чаще и чаще. В чем разница от простого использования .новые и проходят по парам бы объект, а затем .спасти? Есть ли плюсы и минусы? Дает ли использование этих других методов преимущества?

4 ответов


есть несколько отличий, но они не большие:

  1. .create эквивалентно .new затем .save. Просто более лаконично.
  2. .create! эквивалентно .new затем .save! (выдает ошибку при сбое сохранения). Это также просто немного короче
  3. я думаю .build is в основном псевдоним .new. Это работает в одну сторону в Rails 3 и другой способ в Rails

наиболее важной частью, однако, является то, что эти методы могут быть вызваны через ассоциацию (has_many, etc.) автоматически связать две модели.


хотя 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-это более короткая версия new и save. # create! бросает исключение, если проверка не была положительной.


Я бы поддержал вышеуказанные ответы. Плюс за create нельзя передать false в качестве аргумента, который вы можете сделать с save. Проходя false в качестве аргумента пропустит все проверки rails