!
つきのものとそうでないものがあって、一般的には例外を発生させるかどうかの違いという認識だと思う。しかし
!
が付いているからといって例外を発生させるメソッドとは限らない。属性値を変更するだけで、
!
がつくと同時に保存も実行するというパターンも存在する。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@user = User.new | |
# ========== 例外発生系 ========== | |
# 保存する | |
@user.save | |
# 保存に失敗したら例外を発生させる | |
@user.save! | |
# 更新する | |
@user.update(params) | |
# 更新に失敗したら例外を発生させる | |
@user.update!(params) | |
# 新規作成する | |
User.create(params) | |
# 新規作成に失敗したら例外を発生させる | |
User.create!(params) | |
# ========== 保存実行系 ========== | |
# 指定の属性値を1増加させる | |
@user.increment(:login_count) | |
# 指定の属性値を1増加させて、保存する | |
@user.increment!(:login_count) | |
# 指定の属性値を1減少させる | |
@user.dencrement(:login_count) | |
# 指定の属性値を1減少させて、保存する | |
@user.dencrement!(:login_count) | |
# 指定の属性値の真偽を反転させる | |
@user.toggle(:available) | |
# 指定の属性値の真偽を反転させて、保存する | |
@user.toggle!(:available) |
decrement
で減らしているけど、万が一負数になってしまった場合、例外を発生させてトランザクションを失敗させる」場合(バリデーションでやれというのは置いといて)、@user.decrement!(:count)
ではなくて @user.decrement(:count).save!
と書かなければならない。あと、
becomes
と becomes!
という STI(単一テーブル継承)用のメソッドもあるが、これはちょっと別枠ですね。ちなみに
becomes!
は becomes
+ type
カラムの変更となっていて、変換後に保存するときに便利なのかな。あんまり STI を使ったことないけど。
0 件のコメント :
コメントを投稿