モデルの関係を通じて、多くの has_many と has_many を持つモデルがあります。たとえば、私の User クラスには次のものがあります。
has_many :languages, through::profile_languages
User.language_ids= 関数で呼び出されたときに変更された属性の配列を返す「User.changes」関数を使用して、これらがいつ追加または削除されたかを検出できるようにしたいと考えています。
他の誰かがこれをやろうとしたり、これを経験したことがありますか?
ActiveModel 変更機能に関する情報: http://api.rubyonrails.org/classes/ActiveModel/Dirty.html
編集:要求に応じて、これが私がやっていることです。
ユーザーの属性が割り当てられた後、それが保存される前に、外部ログに加えられたすべての変更を記録するために、.changes から返されたすべての値を調べています。
したがって、 u.name = "new name" と呼ぶと
u.changes は {name: ['old name', 'new name']} を返します。
ただし、ユーザーに一連の言語 ID を渡すと、次のようになります。
u.language_ids = [4,5]
その後、いくつかの ProfileLanguage モデルが作成され、u.changes ハッシュは空白のままになります。
ProfileLanguage モデルで、ある種のハッシュを手動で作成するコールバックを作成しようとしていますが、これが本当に最善の解決策であるかどうか疑問に思っています。