2011-04-11 111 views

回答

71

要查看某個ActiveRecord的對象發生了變化,您可以撥打:

instance.changed? 

要查看是否有特定屬性改變時,你可以這樣做:

instance.attr_changed? 

其中attr是屬性你想檢查。

要檢查是否嵌套模式改變了,你可以這樣做:

instance.nested_model.changed? 
+3

感謝您的回覆!但是有沒有什麼辦法可以在事先不知道模型有什麼嵌套模型的情況下檢查是否有嵌套模型的屬性發生了變化? – Zabba 2011-04-11 00:33:31

+0

我會檢查Rails Observers:http://api.rubyonrails.org/classes/ActiveRecord/Observer.html,它可能會通知父變更的模型。 – 2011-04-11 00:36:40

+0

我不認爲nested_model(關聯)更改被跟蹤https://rails.lighthouseapp.com/projects/8994/tickets/541-dirty-attributes-with-associations – lulalala 2012-06-15 05:36:55

3

您可以確定通過調用一個對象是否已經改變,但尚未保存:

my_object.changed? 

你可以還要確定個人屬性是否已更改(例如,您擁有first_name屬性):

my_object.first_name_changed? 

就嵌套模型而言,我認爲您必須分別撥打changed?

+0

感謝您的回覆!但是有什麼方法可以檢查嵌套模型的屬性是否發生了變化,而無需事先知道嵌套模型一個模型有? – Zabba 2011-04-11 00:32:25

+0

我不這麼認爲,可能有一個wa Ÿ獲取所有關聯模型的列表,但我不知道它是否在我頭頂。正如邁克上面提到的那樣,觀察者可能是有用的。我可以問你想要達到什麼效果嗎?可能有更好的解決方案。 – 2011-04-11 00:49:53

+0

謝謝,這就是所謂的完美答案。 – 2016-05-12 07:43:58

6

我知道這是個老問題,但最近遇到了同樣的情況。

即使在保存對象後,也可以使用previous_changes方法獲取嵌套模型的所有更改。

parent_model_object.nested_model_name.previous_changes 

這將列出嵌套模型中的所有更改以及舊值和新值。