Rubyではメソッドの最後に!(びっくりマーク)が付くと破壊的メソッドだと思っていましたが、Railsで出てくるcreate! も破壊的メソッドになるのでしょうか?
よく分かりません。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答2件
0
ベストアンサー
ActiveRecord
の create
だと思いますが、 create!
は破壊的メソッドではないです。レコードの保存に失敗したときの挙動に違いが出ます。
create!
の場合には保存に失敗すると例外が発生します。
それに対して、 create
は例外が出ないので、戻り値のオブジェクトで保存されたかどうか判断する必要があります。
lang
1obj = User.create(:name => 'taroh') 2if (obj.new_record?) 3 4else 5 # エラー処理 6end
例外は本当に「例外」的な場合なので、保存に失敗することはないだろうという時に create!
を使います。
破壊的メソッドの ! はオブジェクトの内容を変えるので使う場合には注意が必要というサインだと思います。
例外はちゃんと捉えないとプログラムが止まってしまうので、create!
もより 注意が必要な方 ぐらいの意味ではないでしょうか。
投稿2014/09/08 09:13
総合スコア863
0
内容としては既に回答があるので、そちらを見てもらうとして、ActiveRecordなどに限らず、Ruby標準でも!
がつくが破壊的メソッドでない物もあります。あまり使わないと思いますが、exit!
。これはKernel
モジュールのモジュールファンクションなので、破壊的と言うことはあり得ないことがわかると思います。
同じく、create!
も仮に意味を知らなくても、クラスメソッドなので、破壊的と言うことはまず無いだろうということは想像が付きます。
(クラスもオブジェクトなので、可能性としては「クラスオブジェクトを書き換える」というのはあり得ますが)
一方、類似のsave!
の方はインスタンスメソッドなので、インスタンスを書き換えることがあり得るかもと言うことで、やや紛らわしいですね。
また、逆に、!
の付かない破壊的メソッドは山ほどありますので、あまり!
にこだわらない方が良いです。
投稿2014/09/08 10:05
総合スコア86208
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2014/09/10 08:12