2

'leave_policies'年,增量和total_entitled字段。如何更新正在驗證唯一性的屬性

我在LeavePolicy模型中編寫了'validates_uniqueness_of:year'。

update_attributes不工作,即使我不更新年份字段。

請指導您的錯誤或建議任何更好的解決方案。

Class LeavePolicy 
    validates_uniqueness_of :year 
end 

@leave_policy是LeavePolicy

在表對象與行:ID = 1年= 1,增量= 2,total_entitled = 3。如果我更新ID行:1像

@ leave_policy.update_attributes(:total_entitled => 5)

我得到了錯誤 「今年已經採取了」。

+0

更多的代碼會讓我們更好地幫助你。例如,模型代碼以及您嘗試的內容。 –

+0

是的,你能告訴我們你的更新行爲的代碼嗎? –

回答

0

您確定沒有其他年份爲1的行,並且@leave_policy實際上是id爲1的行的實例?

如果它實際上是一個新的記錄,它會失敗這種方式,或是否有任何其他紀錄:一年== 1

驗證對所有屬性運行,即使你只上使用update_attributes方法有些,所以如果年份不是唯一的,即使只更新增量或total_entitled字段,它也會失敗。

一般來說,validates_uniqueness本身並不是一個很好的答案,因爲檢查ruby中的競爭條件會阻止它實施唯一性,所以我也將它與數據庫中的唯一鍵一起使用。

如果你希望能夠改變其他領域時,跳過特殊的一年的驗證,您可以在模型設置的屬性,然後調用

leave_policy.save(:validate => false) #for rails 3 
leave_policy.save(false) #for rails 2 

,這將跳過所有驗證,而人,我會三思。 這似乎是失敗的目的,所以我會追求爲什麼它是軌道認爲你沒有一個獨特的一年 - 也許看看你的分貝將顯示那裏真的是一年的行數== 1.