Rails
RubyOnRails
Rails5

Railsでレコード更新後に更新前の情報を取得する

レコード変更前と変更後の値を比較したい

Railsで開発していて、レコード変更前と変更後の値を比較したい実装が出てきて、どうやろうかなーと思ったらprevious_changesという便利なメソッドが用意されていました。

使い方

Hogeというテーブルのnameカラムに'変更前'という文字列が格納されているとします。

@hoge = Hoge.find(1)
@hoge.update("name = '変更後'")

@hoge.previous_changes
# {"name"=>['変更前', '変更後'], "updated_at"=>[Wed, 13 Jun 2018 14:12:50 JST +09:00, Wed, 13 Jun 2018 14:13:42 JST +09:00]}

どのカラムにどういった変更が入ったかを知るのに便利ですね。