ruby-on-rails - 检测 rails has_many :through relationship 中的变化

标签 ruby-on-rails ruby-on-rails-3 has-many-through

我有一个模型,它有许多 has_many 和 has_many :through 模型关系。例如,在我的 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 模型中创建一些回调,以手动创建某种哈希,但我想知道这是否确实是最佳解决方案。

最佳答案

我现在要使用的有点脏的解决方案是向 has_many 函数添加回调:

has_many :languages, through: :profile_languages, 
        :after_add => :language_add, 
        :before_remove => :language_remove

并将此信息添加到自定义哈希中,当我查看 .changes 函数时,将在保存配置文件时检查该哈希。

关于ruby-on-rails - 检测 rails has_many :through relationship 中的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13300384/

相关文章:

ruby-on-rails - Eager Loading with "has many through"—— 我需要 Arel 吗?

ruby-on-rails - rspec-core 中的 find_failed_line 错误

ruby-on-rails-3 - Rails3通过问题嵌套has_many

ruby-on-rails - 留下未使用的 REST 操作不好吗?

ruby-on-rails - 在 Rails 中使用改革 gem,如何填充 has_many :through nested model

mysql - 如何通过 ruby​​ on Rails 中的联接表进行单个查询来检索与模型相关的对象

ruby-on-rails - 哪个RoR模板引擎与Razor模板引擎相似?

javascript - 将编辑器与 Active Admin 一起使用

ruby-on-rails - Rails - 如何使用 github 上的插件(如何安装、使用等)

ruby-on-rails-3 - 如何从 Rails 3 中的模型访问 cookie