我将params传递给模型实例并使用update_attributes保存它。它与其他几个模型相关联,我已将其配置为使用accepts_nested_attributes_for更新其中一些模型。
这是非常好的和干净的,因为我只需更新一个模型,但我想得到一个已更新的相关(嵌套)模型的列表,以便我可以向用户提供有关某些模型的反馈已经改变的领域。
有没有办法做到这一点,还是我以错误的方式解决问题?
答案 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()