ですから、bangメソッド(感嘆符)と非bangメソッドの違いは、通常、メソッドがオブジェクト自体を変更するか、元の変更せずに別の変更されたオブジェクトを返すかです。
次に、本の第6章でユーザーモデルを作成しているときに、User.create
メソッド。新しいモデルを作成し、1つのステップでデータベースに保存します。 Michael HartlのRuby on Rails 3 Tutorial)で、彼はUser.create!
メソッド "create
メソッドと同じように動作します...ただし、作成が失敗した場合にActiveRecord :: Record-Invalid例外が発生する点が異なります。"
私はかなり混乱しています。それは User.create!
メソッドに従わないRuby "bang-convention"または完全に何かが足りないのですか?そして、もし彼がIS規則に従っている場合、User.create!
クラスメソッドの場合、自分自身を変更しますか?
多くのクラスはbangメソッドを「オブジェクトをインプレースで変更するメソッド」として扱いますが、私は Eloquent Ruby book より良いbangメソッドの説明が好きです:
実際には、Rubyプログラマは!
したがって、この場合、「予期しない」結果は、単に失敗してfalse
を返すのではなく、例外が発生することです。
これも役立つことを願っています:
Bangバージョン(例:save!)では、レコードが無効な場合に例外が発生します。非bangバージョンではありません。saveおよびupdate_attributesはfalseを返し、createおよびupdateはオブジェクトを返すだけです。
編集:リンク切れを修正するためにソースを変更しました