如何获取在保存ActiveRecord实例期间更新的关联模型的列表?

时间:2014-04-08 10:20:49

标签: ruby-on-rails ruby activerecord rails-activerecord

我将params传递给模型实例并使用update_attributes保存它。它与其他几个模型相关联,我已将其配置为使用accepts_nested_attributes_for更新其中一些模型。

这是非常好的和干净的,因为我只需更新一个模型,但我想得到一个已更新的相关(嵌套)模型的列表,以便我可以向用户提供有关某些模型的反馈已经改变的领域。

有没有办法做到这一点,还是我以错误的方式解决问题?

1 个答案:

答案 0 :(得分:0)

我找到了问题的解决方案,也许不是最好的解决方案,但它会起作用。

对于已关联且已配置accepted_nested_attributes_for的模型列表,我们将:

associations = ModelClass.reflect_on_all_autosave_associations()

每个关联对象都有一个名称属性(关联名称),可用于访问实例上的关联,然后我们可以检查此关联是否已更改:

associations.each{|assoc|
    model_instance.send(assoc.name).changed?
}

应该注意的是,我们不能将update_attributes用于此解决方案,因为在我们检查是否有任何更改之前,所有模型都已保存。所以我们必须在不同的步骤中分配_attributes并保存模型:

model_instance.assign_attributes(params[:model_instance])
// check for changes on associations here
model_instance.save()