これはRailsで何をするのですか?作成するものレールの意味ですか?
create! do |user|
#initialise user
end
私は、ユーザーオブジェクトを作成し、データベースに保存すると考えました。 user.new(...)
とuser.save()
とはどう違うのですか?
これはRailsで何をするのですか?作成するものレールの意味ですか?
create! do |user|
#initialise user
end
私は、ユーザーオブジェクトを作成し、データベースに保存すると考えました。 user.new(...)
とuser.save()
とはどう違うのですか?
一言で言えば:作成!例外を発生させ、createはオブジェクトを返します(検証をパスしない場合、未保存のオブジェクト)。セーブ!エラーを発生させ、saveはtrue/falseを返します。 saveは属性を使用せず、createは行いません。
新規保存しません。 newはActiveRecordコンテキストでのビルドと似ています。 createデータベースに保存し、モデルの検証に応じてtrueまたはfalseを返します。 作成!データベースに保存しますが、モデルの検証(またはその他のエラー)にエラーがある場合は例外が発生します。
レコードを作成することができなかった場合は、create!
が例外をスローし、new
、その後save
(または単にcreate
感嘆符なし)の出口静か。
create
は属性を使用するため、ここでブロックを使用するのは多少珍しいことです。あなたが言及 コードはそれは校長に初期化が続くnew
と同じであるcreate!
に渡されたブロック内の初期化を行った後、save!
され、多くのバリエーションがあります作成!、保存、保存、ceate !、更新、更新!など、 バリエーションは、検証の面でもあり、その詳細について
をバック呼び出すAPIを確認してください。(それは最初のリンクで議論される)
http://api.rubyonrails.org/classes/ActiveRecord/Base.html
少し間違っています。作成/作成!/保存/保存!すべて微妙に異なります。作成/作成!モデル属性を取る。保存/保存!モデル属性パラメータを取りません。 bang(create!/ save!)メソッドは検証の失敗時に例外を発生させ、bang(create/save)しないメソッドは無効にします。 –
またsave doesntはnilを返し、検証の結果(trueまたはfalse)を返します。 –
それはばかげている。私は決して 'セーブ'が議論をとると言ったことはありません。 私は関連するドキュメントを指摘しました - どうしたのですか? – Tilo
これは良い答えですので、私はupvoted。ただし、 'create'はブール値を返しません。検証に合格したかどうかにかかわらず、オブジェクトインスタンスを返します。 –
@AdityaSanghi - あなたの答えに感謝します。 「作成!データベースに保存しますが、モデルの検証(またはその他のエラー)にエラーがある場合は例外が発生します。 -------->バリデーションが渡されないと、どのようにデータベースに何かを保存できますか? – BKSpurgeon
@bkspurgeon検証が失敗した場合は保存されません。 bangメソッドは、bang以外のバージョンからの失敗の場合とは異なる動作をします。 Bangバージョンは例外を発生させ、non-bangバージョンはfalseを返します。 –