如果使用validates_length_of,是否需要validates_presence_of?

时间:2009-10-20 05:29:57

标签: ruby-on-rails ruby validation activerecord

在ActiveRecord模型中,当使用validates_presence_of时,考虑使用validates_length_of是最佳做法/必要吗?

例如:

class Company < ActiveRecord::Base
  validates_presence_of :name
  validates_length_of   :name, :in => 5..30
end
对我来说,这似乎是多余的。长度在5到30之间意味着该属性也存在,但我看到这在任何地方都使用。它还意味着当真正只需要一个属性时,用户会收到两条关于相同缺失属性的错误消息。

我是否遗漏了某些内容,或者在验证数据时人们是否过于热心?

2 个答案:

答案 0 :(得分:7)

使用validates_length_of时,

validates_presence_of完全是冗余的,除非您向validates_length_of提供:allow_nil => true:allow_blank => true

任何验证中allow_nil和allow_blank选项的默认值均为false。 validates_presence_of仅在属性既不为空或空白时失败。因此,当allow_nil或allow_blank都不作为验证选项提供时,大多数提供的验证都会使validates_presence_of变得多余。

答案 1 :(得分:3)

人们过于热心。您可以同时使用这两种方法,但除非您将:allow_nil传递给validates_length_of,否则用户的体验会很差。