2009-10-20 62 views
4

在ActiveRecord模型中,當同時使用validates_length_of時,最佳實踐/必需使用validates_presence_of如果使用validates_length_of,validates_presence_of是否必要?

例如:

class Company < ActiveRecord::Base 
    validates_presence_of :name 
    validates_length_of :name, :in => 5..30 
end 

對我來說,這似乎是多餘的。長度在5到30之間意味着該屬性也存在,但我看到這個用處無處不在。這還意味着用戶會收到兩條關於相同缺失屬性的錯誤消息,而實際上只有一條是需要的。

我錯過了什麼,或者當人們在驗證數據時過於狂熱?

回答

7

validates_presence_of與validates_length_of結合使用時是完全多餘的,除非您提供:allow_nil => true:allow_blank => true以validates_length_of。

任何驗證中的allow_nil和allow_blank選項的默認值爲false。如果屬性既不爲零也不爲空,validates_presence_of只會失敗。因此,當allow_nil或allow_blank都不作爲驗證的選項提供時,validates_presence_of會被大部分提供的驗證冗餘。

3

人們過於熱心。您可以同時使用這兩項,但除非您通過:allow_nilvalidates_length_of,否則用戶的體驗可能會很差。

+0

對,這就是我的想法。 :allow_nil僅在公司名稱必須介於5到30個字符之間或可能丟失時纔有用。如果您希望公司名稱的長度介於5到30個字符之間,您*不需要:allow_nil。 – mlambie

相關問題