特定のカラムの値が変更された場合のみに
実行したい処理がある場合等に便利です。
class User < ActiveRecord::Base attr_accessible :name, :sex, :birthday def change_name # 何かしらの処理 end end
このようなmodelがあり、
下記のコードのような処理が行われnameが変更された場合のみ
change_nameメソッドを呼びたい
user = User.find(1) user.name = "hoge" user.save!
columnname_wasを使用すると変更前の値を取得出来る
今回はnameカラムが変更されたか知りたいのでname_wasを使用します。
下記の様にafter_updateで判定を追加してみる
class User < ActiveRecord::Base attr_accessible :name, :sex, :birthday after_update do change_name unless name == name_was end private def change_name p "hoge" end end
これで先ほどの様にfindからsave!まで行うとchange_nameが呼ばれhogeが出力されているかと思います。