看起來validates_uniqueness_of:即使some_field屬性沒有改變(如果其他字段已經改變),some_field也會在「保存」上運行。這看起來很浪費,因爲每個validates_uniqueness_of都需要數據庫調用。我知道我可以通過一個Proc to validates_uniqueness_of來檢查some_field是否已經改變,我正在考慮通過所有的驗證並儘可能地做到這一點。我想知道的是:爲什麼Rails驗證未改變的屬性?
1)人們對錶演感興趣嗎?
2)爲什麼它不是validates_uniqueness_of的默認行爲來檢查屬性是否先改變?
3)有沒有很好的理由對沒有改變的屬性進行驗證?
我正在使用Rails 2.3(目前 - 我們正在進行升級)。我不知道這是Rails 3中的相同情況。
關於2和3,值可以放到Rails應用程序之外的數據庫中。因此,另一個應用添加的值可能會使您的不變屬性無效。此外,您的驗證可能會隨着時間的推移而變化,導致無變化的屬性無效。 – niiru
@niiru:感謝您花時間回覆。從用戶的角度來看,編輯記錄的一部分真的很奇怪,然後被告知該記錄的另一部分是無效的,這是沒有編輯的,並且在邏輯上與變化無關。另外,在你的場景中,如果rails應用程序在字段上執行唯一性,那麼其他應用程序是否也應該這樣做? –
肯定!但是,您可能正在處理與多個應用程序綁定的數據庫,並不是所有這些數據庫都對數據驗證負責,因爲您的應用程序是...... – niiru