Railsでモデルの変更前後の値


Railsでモデル/Active Recordのattributeから、変更時に変更前の値を取得したり、変更のチェックを行うメソッドを紹介します。

😸 変更前のattributeの取得

カラム名_wasで変更前の値を取得できます。

article = Article.find(1)
puts article.title #=> 'before title'
article.title = 'after title'
# 変更前の値の取得
puts article.title_was #=> 'before title'

changesメソッドで変更のあったカラム名と、変更の前後の値を取得できます。

article = Article.find(1)
puts article.title #=> 'before title'
article.title = 'after title'
# 変更前の値の取得
puts article.changes #=> {"title" => ['before title', 'after title']}

🗽 attributeの変更をチェックする

カラム名_changed?は値を変更した場合にtrueを返します。

article = Article.find(1)
puts article.title #=> 'before title'
puts article.title_changed? #=> false
article.title = 'after title'
puts article.title_changed? #=> true

attributesのどれかに変化があった場合は、モデルオブジェクト.changed?で確認できます。

article = Article.find(1)
puts article.title #=> 'before title'
puts article.changed? #=> false
article.title = 'after title'
puts article.changed? #=> true

🚌 参考リンク

📚 おすすめの書籍