我有一个具有多个 has_many 和 has_many 的模型:通过模型关系。例如,在我的 User 类中,我有:
has_many :languages,通过: :profile_languages
我希望能够使用“User.changes”函数检测何时添加或删除这些属性,该函数返回一个在使用 User.language_ids= 函数调用时已更改的属性数组。
有没有其他人尝试过这样做,或者有这方面的经验?
有关 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 模型中创建一些回调,这些回调将手动创建某种哈希,但我想知道这是否确实是最好的解决方案。