ActiveRecord のモデルで変更のあった属性だけを抜き出す方法に、previous_changes メソッドが使える。

環境

Rails
3.0.7

ActiveRecord で更新があった属性を取得するメソッドに、previous_changes があります。

これを使えば、データ更新後に、更新した属性のみをメールに書いて送る!みたいな処理が簡単に書けますね。

previous_changes
Returns a Hash of previous changes before the object was persisted, with the attribute names as the keys, and the values being an array of the old and new value for that field.
1
2
3
4
5
6
7
8
9
10
11
user = User.find(params[:id])
user.name
  # => "Syougo Hamada"
user.name = "hamasyou"
user.age
  # => 28
user.age = 29
user.save

user.previous_changes
  # => {"name"=>["Syougo Hamada", "hamasyou"], "age"=>[28, 29]}