2
我明白,要檢查是否有模式已經改變了一個可以使用:鋼軌檢查該模型的屬性發生變化
instance.changed?
而且檢查的屬性發生變化:
instance.attr_changed?
但我們如何確定哪個屬性發生了變化?有沒有辦法我們可以迭代所有的屬性,並以某種方式確定哪一個已經改變?
我明白,要檢查是否有模式已經改變了一個可以使用:鋼軌檢查該模型的屬性發生變化
instance.changed?
而且檢查的屬性發生變化:
instance.attr_changed?
但我們如何確定哪個屬性發生了變化?有沒有辦法我們可以迭代所有的屬性,並以某種方式確定哪一個已經改變?
你可以看一下它很容易使用:
instance.changed_attributes
或
instance.changed
首先一個會給你哈希{"attribute" => "value before change"}
。
第二個返回已更改屬性的名稱數組:["name of changed attribute"]
。
嗯......令人驚訝的是,instance.changed?返回true,而instance.changed不會打印任何內容。有任何想法嗎 ? – 2014-11-06 12:42:29
這很有趣。也許你正在使用一些覆蓋一些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
是的,它確實被覆蓋。謝謝! – 2014-11-06 13:27:19