2012-04-15 66 views
24

我有以下型號場驗證:驗證以確保唯一性但忽略空值?

validates_uniqueness_of :acronym, :scope => [:group_id], :case_sensitive => false 

的問題是,這一領域是可選的,一個空/零值返回作爲已經採取的縮寫。我只想驗證,如果提供了一個值的首字母縮寫是唯一的。有沒有辦法更新此驗證只發生,如果有一個實際值..不零/空?

感謝

回答

53

是的,有可以傳遞給驗證爲可選字段兩個可能的選擇::allow_blank:allow_nil,這將跳過blanknil領域的驗證,分別。如果您將驗證更改爲以下內容,則應該得到您想要的行爲:

validates_uniqueness_of :acronym, :allow_blank => true, :scope => [:group_id], :case_sensitive => false 
+0

非常感謝!我的代碼更全面。其他答案建議使用:除非或:如果,但我認爲這是最好的方法。讓group_id出陣列的任何問題? – 2014-04-02 20:08:11

+1

這個規範是'it {is_expected.to validate_uniqueness_of(:acronym).scoped_to(:group_id).case_insensitive.allow_blank}' – 2015-02-18 16:20:40