4
在我的Rails應用程序中,我嘗試使用update_attribute
在after_create
回調中更新模型的屬性。我可以成功更新屬性,但出於某種原因,當我這樣做時,所有模型的其他屬性也會更新。因此,即使模型的名稱屬性(例如)沒有更改,它也會在數據庫更新查詢中設置爲當前值。在創建回調後更新屬性會導致更新整個記錄
這是Rails(2.3.8)中的預期行爲,還是我做錯了什麼?
在我的Rails應用程序中,我嘗試使用update_attribute
在after_create
回調中更新模型的屬性。我可以成功更新屬性,但出於某種原因,當我這樣做時,所有模型的其他屬性也會更新。因此,即使模型的名稱屬性(例如)沒有更改,它也會在數據庫更新查詢中設置爲當前值。在創建回調後更新屬性會導致更新整個記錄
這是Rails(2.3.8)中的預期行爲,還是我做錯了什麼?
是的我相信這是一致的行爲,因爲剛剛創建的模型實例尚未重新加載。因此'已更改'屬性沒有被重置。
對不起,如果這不是一個非常明確的解釋。爲了演示,在你的after_create方法中運行調試器。例如。
def my_after_save_callback
require 'ruby-debug'; debugger
update_attribute(:foo, "bar")
end
然後,當調試器開始運行:
p self.changed
已經修飾該對象將被返回的所有屬性的數組。 ActiveRecord會在下一次保存對象時更新所有這些屬性。
解決此問題的一個方法是在更新屬性之前重新加載對象。
def my_after_save_callback
reload
update_attribute(:foo, "bar")
end
這將重置'changed'屬性,只有您修改的特定屬性將在SQL查詢中更新。
希望有道理:-)
你可以發佈你的after_create代碼嗎? – 2010-09-01 15:54:48