2011-11-10 2 views

答えて

15

一言で言えば:作成!例外を発生させ、createはオブジェクトを返します(検証をパスしない場合、未保存のオブジェクト)。セーブ!エラーを発生させ、saveはtrue/falseを返します。 saveは属性を使用せず、createは行いません。

新規保存しません。 newはActiveRecordコンテキストでのビルドと似ています。 createデータベースに保存し、モデルの検証に応じてtrueまたはfalseを返します。 作成!データベースに保存しますが、モデルの検証(またはその他のエラー)にエラーがある場合は例外が発生します。

+1

これは良い答えですので、私はupvoted。ただし、 'create'はブール値を返しません。検証に合格したかどうかにかかわらず、オブジェクトインスタンスを返します。 –

+0

@AdityaSanghi - あなたの答えに感謝します。 「作成!データベースに保存しますが、モデルの検証(またはその他のエラー)にエラーがある場合は例外が発生します。 -------->バリデーションが渡されないと、どのようにデータベースに何かを保存できますか? – BKSpurgeon

+1

@bkspurgeon検証が失敗した場合は保存されません。 bangメソッドは、bang以外のバージョンからの失敗の場合とは異なる動作をします。 Bangバージョンは例外を発生させ、non-bangバージョンはfalseを返します。 –

2

レコードを作成することができなかった場合は、create!が例外をスローし、new、その後save(または単にcreate感嘆符なし)の出口静か。

-3

createは属性を使用するため、ここでブロックを使用するのは多少珍しいことです。あなたが言及 コードはそれは校長に初期化が続くnewと同じであるcreate! に渡されたブロック内の初期化を行った後、save!

され、多くのバリエーションがあります作成!、保存、保存、ceate !、更新、更新!など、 バリエーションは、検証の面でもあり、その詳細について

をバック呼び出すAPIを確認してください。(それは最初のリンクで議論される)

http://api.rubyonrails.org/classes/ActiveRecord/Base.html

http://apidock.com/rails/ActiveRecord/Base

http://m.onkey.org/active-record-query-interface

+1

少し間違っています。作成/作成!/保存/保存!すべて微妙に異なります。作成/作成!モデル属性を取る。保存/保存!モデル属性パラメータを取りません。 bang(create!/ save!)メソッドは検証の失敗時に例外を発生させ、bang(create/save)しないメソッドは無効にします。 –

+0

またsave doesntはnilを返し、検証の結果(trueまたはfalse)を返します。 –

+1

それはばかげている。私は決して 'セーブ'が議論をとると言ったことはありません。 私は関連するドキュメントを指摘しました - どうしたのですか? – Tilo

関連する問題