回答:
いくつかの違いがありますが、大きくはありません。
.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_withAPI(JSON / XML)応答に使用されます。この場合、オブジェクトにエラーが存在すると、ステータスがのレスポンスでエラーが返されunprocessable_entityます。これは、APIから要求するものとまったく同じです。
特にフロー制御の戻り値に依存している場合は特に、html のnew+ saveオプションを常に使用します。