2009-10-20 39 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

相关问题