2014-04-08 31 views
1

我將params傳遞給模型實例並使用update_attributes保存它。它與其他幾個模型相關聯,我將它配置爲使用accep_nested_attributes_for更新其中的一些模型。如何獲取在保存ActiveRecord實例期間更新的關聯模型的列表?

這是非常好的和乾淨的,因爲我只需要更新一個模型,但我想獲得一個關聯(嵌套)模型的列表,這些模型也進行了更新,以便我可以向用戶反饋一些關於的領域已經改變。

有沒有辦法做到這一點,或者我以錯誤的方式接近問題?

回答

0

我已經找到了解決我的問題,也許不是最好的,但它會工作。

對於那些相關的和有機型列表accepts_nested_attributes_for配置,我們去:

associations = ModelClass.reflect_on_all_autosave_associations() 

每個關聯對象都有一個名字屬性(協會名稱),可用於對訪問關聯關係實例,然後我們就可以檢查該協會是否發生了變化:

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

應當指出的是,我們不能用這個解決方案中使用update_attributes方法,爲所有的車型都保存之前,我們可以檢查是否有任何改變。所以我們必須分配屬性並分開保存模型:

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