回答:
いくつかの違いがありますが、大きくはありません。
.create
の.new
後にが続くことと同じ.save
です。それはもっと簡潔です。.create!
に.new
続く.save!
(保存に失敗した場合はエラーをスローする)と同じです。また、ほんの少し短いです.build
いるほとんどの別名.new
。これは、1つのRails 3の道作品とRails内の別の方法<3.xのをただし、最も重要な部分は、これらのメソッドを関連付け(has_many
など)を介して呼び出し、2つのモデルを自動的にリンクできることです。
正しいですが、create
呼び出しnew
た後およびsave
その戻り値の二つの選択肢の間には大きな差があります。
Save
オブジェクトがデータベースに正常に保存されたかどうかに応じて、true
またはを返しますfalse
。これは、上記の質問の最初の例のように、フロー制御に使用できます。
Create
オブジェクトが保存されたかどうかに関係なく、モデルを返します。これはif
、オブジェクトが検証に失敗して保存されない場合でも、ステートメントの一番上の分岐が常に実行されるという点で、上記のコードに影響を与えます。
create
分岐ロジックを使用する場合、new
+ を使用する場合には当てはまらない、サイレント障害のリスクがありますsave
。
create!
レコードが無効な場合に発生し、例外が発生するため、同じ問題の影響を受けません。
create
代替は、コントローラに有用であることができるrespond_with
API(JSON / XML)応答に使用されます。この場合、オブジェクトにエラーが存在すると、ステータスがのレスポンスでエラーが返されunprocessable_entity
ます。これは、APIから要求するものとまったく同じです。
特にフロー制御の戻り値に依存している場合は特に、html のnew
+ save
オプションを常に使用します。