我在Rails中遇到了一個很奇怪的問題。我在父對象上使用update_attributes
來更新所有子對象。這些子對象具有(自定義)驗證功能,並且確實可以正常工作,這意味着如果我給出錯誤的值驗證觸發器並返回錯誤。爲什麼Rails update_attributes在保存前調用驗證
現在我處於一種奇怪的情況,其中一個模型在數據庫中無效(我們不要質疑爲什麼,我們只是說我可以在數據庫中運行一些SQL來使模型無效)。如果我進入我的應用程序,我可以看到無效的值,這很好。我修復了這些值並再次保存,我可以看到,在保存新值之前加入了驗證調用的ruby代碼,這意味着我將得到一個錯誤,並且Rails將永遠不會執行SQL以實際更新值到正確的。
我希望以上是有道理的。你有什麼想法嗎?或者你認爲有什麼我可以忽略的?
SOLUTION:
發生了什麼事是一個多一對多的關係被新的數據被替換之前驗證現有的DB數據。基本結構是這樣的:
class User
has_many :user_permissions
has_many :permissions, :through => :model_permissions
class Permission
has_many :user_permissions
has_many :users, :through => :user_permissions
class UserPermission
belongs_to :user
belongs_to :permission
validates_associated :user # THIS was causing the problem
validates_associated :permission # and THIS as well
我只是去掉了validates_associated
指令,因爲我驗證鏈接的記錄獨立反正。
'它可能是一個相關模型包含錯誤'...這指出我在正確的方向。多對多鏈接表正在驗證相關模型,在我有機會保存(並驗證)新數據之前,使用舊數據驗證這些模型。更新我的問題。謝謝! – Tallmaris