ActiveRecord で更新した diff 知りたいとき

user レコードの uid, name をアップデートした diff

(id, created_at, updated_at の diff は抜いた)

(main)> user = User.find 1
(main)> old_user = user.dup
(main)> user.update(uid: 'fugafuga', name: 'ふが')
(main)> diff = (user.attributes.to_a - old_user.attributes.to_a).map(&:first) - %w(id created_at updated_at)
(main)> p diff.map{|column| "#{column} : #{old_user[column]} => #{user[column]}"}
=> ["uid : hogehoge => fugafuga", "name : ほげ => ふが"]

同じような gem もあった

古いかな

github.com

常に履歴を残したい場合は、こっちの gem がヨサソウ

Qiita の投稿の履歴管理にも使われてるっぽい

github.com