virtus-dirty_attribute について

最近、仕事上の Ruby プロジェクトで、"モデルに変更があった時だけそのモデルに対して update したい" みたいな要望があって、いろいろ調べたのですが、最終的に virtus-dirty_attribute というのを使うことになった。

virtus-dirty_attribute の使い方

https://github.com/ahawkins/virtus-dirty_attribute

README にも書いてあるけど、

class Hoge
  include Virtus.model
  include Virtus::DirtyAttribute

的な感じに include すると、hoge.dirty? とか hoge.clean? とかで変更があったかどうかが見れるという代物。

へー、便利だなー、でも Rails さんそこらへんやってくれないのかしら?と思っていたら、やっぱり一応あった。それが ActiveModel::Dirty。

ActiveModel::Dirty

http://api.rubyonrails.org/classes/ActiveModel/Dirty.html

なにやら define_attribute_methods とか定義したり、各 attribute のメソッドを定義して hogehoge_will_change とか呼んであげたりと、結構色々やってあげなきゃいけなそう。。。

ActiveRecord 使っているとそこら辺勝手にやってくれるらしく、ActiveRecord のモデルでやる文には便利そう。

というわけで

今回 "モデルに変更があった時だけそのモデルに対して update したい" ということがしたかったのは、たまたま ActiveRecord のモデルじゃなかったので、virtus-dirty_attribute で行くのが良さそう。