質問

したがって、私は通常、バング(感嘆符)と非バングメソッドの区別は、通常、メソッドがオブジェクト自体を変更するか、元の変更を変更している別の変更されたオブジェクトを返すかどうかです。

その後、本の第6章でユーザーモデルを構築しているときに、私は出会いました User.create メソッドは、新しいモデルを作成し、単一のステップでデータベースに保存します。マイケル・ハートルの Ruby on Rails 3チュートリアル, 、彼はそれを書いています User.create! メソッド」と同じように機能します create 方法...それが上昇することを除いて ActiverCord :: Record-Invalid 作成が失敗した場合の例外。」

私はかなり混乱しています。それは User.create! Rubyの「Bang Convention」に従わない方法ですか、それとも私は完全に何かが欠けていますか?そして、彼が大会に従っているなら、どのように User.create! クラスメソッドの場合、自己を変更しますか?

役に立ちましたか?

解決

多くのクラスでは、BANGメソッドを「配置されたオブジェクトを変更する方法」として扱っていますが、BANGメソッドの説明が好きです 雄弁なルビーブック より良い:

実際には、Ruby Programmers Reserve!予想外の、またはおそらく少し危険なことをする方法の名前を飾る

したがって、この場合、「予期しない」結果は、単に失敗して戻るのではなく、例外が提起されることです false.

他のヒント

これも役立つことを願っています:

BANGバージョン(SAVE!など)は、レコードが無効である場合、例外を提起します。 Bang以外のバージョンは次のとおりです。Andawed_attributesfalseを返し、オブジェクトを返すだけです。

ソース: http://edgeguides.rubyonrails.org/active_record_validations.html#when-does-validation-happen-questionmark

編集:ソースを変更して、壊れたリンクを修正しました

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top