即使字段沒有改變,每次保存對象時validates :uniqueness
會被調用嗎?這不是性能問題嗎?驗證字段沒有改變時調用唯一性?
validates :name, :schedule_id, :uniqueness => true
它似乎是這樣的情況。因此,在運行驗證之前,確保進行更改幾乎總是有必要的嗎?由於檢查每個字段的唯一性需要數據庫命中。
這會更好:
validates :name, :schedule_id, :uniqueness => true, :if => "name_changed? || schedule_id_changed?"
而這更好的,如果有點冗長:
validates :name, :uniqueness => true, :if => :name_changed?
validates :schedule_id, :uniqueness => true, :if => schedule_id_changed?
要點在這裏:https://gist.github.com/4017019
你的問題到底是什麼?重刑?你只是在尋找唯一性驗證始終運行的確認嗎? –
是的。如果這個領域沒有改變,我的意思是。如果是這樣,就不應該爭論UniquenessValidator是否應該固有知道何時運行驗證。如果字段沒有改變,那麼在數據庫上運行一個相當昂貴,不必要的請求? –
第二個看起來更加靈活,並且在對象沒有改變時幫助防止不必要的驗證,但就正常的驗證而言,每次將數據保存在數據庫中時都必須運行它,這一小部分開銷將會運行確保數據始終保持有效和正確的很長的一段路... –