2014/07/04

ActiveRecord の ! つきメソッドについて

ActiveRecord の更新系メソッドには、!つきのものとそうでないものがあって、一般的には例外を発生させるかどうかの違いという認識だと思う。
しかし!が付いているからといって例外を発生させるメソッドとは限らない。
属性値を変更するだけで、!がつくと同時に保存も実行するというパターンも存在する。 なので、「decrement で減らしているけど、万が一負数になってしまった場合、例外を発生させてトランザクションを失敗させる」場合(バリデーションでやれというのは置いといて)、@user.decrement!(:count) ではなくて @user.decrement(:count).save! と書かなければならない。

あと、 becomesbecomes! という STI(単一テーブル継承)用のメソッドもあるが、これはちょっと別枠ですね。
ちなみに becomes!becomes + type カラムの変更となっていて、変換後に保存するときに便利なのかな。あんまり STI を使ったことないけど。

0 件のコメント :

コメントを投稿