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

🤔 参考リンク

📚 おすすめの書籍

🖥 サーバについて

このブログでは「Cloud Garage」さんのDev Assist Program(開発者向けインスタンス無償提供制度)でお借りしたサーバで技術検証しています。 Dev Assist Programは、開発者や開発コミュニティ、スタートアップ企業の方が1GBメモリのインスタンス3台を1年間無料で借りれる心強い制度です!(有償でも1,480円/月と格安)