2014-11-06 51 views
2

我明白,要檢查是否有模式已經改變了一個可以使用:鋼軌檢查該模型的屬性發生變化

instance.changed? 

而且檢查的屬性發生變化:

instance.attr_changed? 

但我們如何確定哪個屬性發生了變化?有沒有辦法我們可以迭代所有的屬性,並以某種方式確定哪一個已經改變?

回答

3

你可以看一下它很容易使用:

instance.changed_attributes 

instance.changed 

首先一個會給你哈希{"attribute" => "value before change"}

第二個返回已更改屬性的名稱數組:["name of changed attribute"]

+0

嗯......令人驚訝的是,instance.changed?返回true,而instance.changed不會打印任何內容。有任何想法嗎 ? – 2014-11-06 12:42:29

+0

這很有趣。也許你正在使用一些覆蓋一些AR功能的寶石? 當你看文檔:http://api.rubyonrails.org/classes/ActiveModel/Dirty.html#method-i-changed,你可以看到'changed'的實現:'changed_attributes.present?','改變了?' :'changed_attributes.keys'和'changed_attributes':'@changed_attributes || = ...'。因此 - 這是不可能的**除非**你以某種方式改變AR的行爲。 – Esse 2014-11-06 12:49:48

+0

是的,它確實被覆蓋。謝謝! – 2014-11-06 13:27:19