Dirtyモジュール
データの更新があった時に変更したことの検知や、変更前と変更後のデータを取得したいという場面がありました。
ActiveModel::Dirty
モジュールを使うと、オブジェクトで変更があったかどうかを検出でき、また変更前と変更後のデータも取得できます。
user = User.new
user.changed? # => false
user.name = "Tom"
user.name # => "Tom"
# 属性が1つ以上変更されている場合にtrueを返す
user.changed? # => true
# 保存前に変更された属性のリストを返す
user.changed # => ["Tom"]
# 元の値から変更された属性のハッシュを返す
user.changed_attributes # => {"Tom"=>nil}
# 変更のハッシュを返す (ハッシュのキーは属性名、ハッシュの値はフィールドの新旧の値の配列
user.changes # => {"name"=>[nil, "Tom"]}
# 特定の属性が変更されている場合にtrueを返す
user.name_changed? # => true
user.age_changed? # => false
# 特定の属性の変更前の値を返す
user.name_was # => nil
user.name = "Jun"
user.name_was # => "Tom"
# 変更された属性の、変更前と変更後の値を配列で返す。変更が無い場合はnilを返す
user.name_change # => ["Tom", "Jun"]
user.age_change # => nil
Dirtyモジュールのいくつかのメソッド名が非推奨になったようです。Railsガイドやその他記事を見て使用する際は、以下の記事を確認してから使用してみてください。