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

👽 参考リンク

🖥 VULTRおすすめ

VULTR」はVPSサーバのサービスです。日本にリージョンがあり、最安は512MBで2.5ドル/月($0.004/時間)で借りることができます。4GBメモリでも月20ドルです。 最近はVULTRのヘビーユーザーになので、「ここ」から会員登録してもらえるとサービス開発が捗ります!

📚 おすすめの書籍