"验证"之间的区别是什么?和"验证"?

时间:2013-08-09 06:04:45

标签: ruby-on-rails validation

我使用以下方法为对象添加了验证:

validate :field, presence: true

我发现他们没有提供错误消息。我将它们更改为validates并收到错误消息。 This ticket是相关的。

我尝试使用validates添加自定义验证并收到错误:

You need to supply at least one validation

我将其更改为validate,一切都按预期进行。

我的理解是validates使用普通验证,validate使用自定义验证。是对的吗?还有其他我应该知道的部分吗?有没有办法让第一个问题大声失败而不只是验证一切?

2 个答案:

答案 0 :(得分:65)

验证此方法是所有默认验证程序和以“Validator”结尾的任何自定义验证程序类的快捷方式。请注意,通过在其位置创建自定义验证程序类(如PresenceValidator),可以在特定类中覆盖Rails默认验证程序。

validates :title, :body, :presence => true

验证,向课程添加验证方法或块。当覆盖验证实例方法变得过于笨拙并且您正在寻找更具描述性的验证声明时,这非常有用。

validate :must_be_friends

  def must_be_friends
    errors.add(:base, 'Must be friends to leave a comment') unless commenter.friend_of?(commentee)
  end

答案 1 :(得分:9)

我认为:validate声明用于自定义验证,其中:validates用于通用验证,例如presence, uniqueness etc一个字段

validate方法查找带参数名称的方法,即  如果你validate :field它将寻找

def field 

end

object上。由于Rails为每个数据库attr_accessor定义了fieldvalidate :field会调用field的读者方法。

如果验证函数返回true或者有error个对象,即object.errors不为空,则该对象被视为valid?

因此ligthouse问题的原因,他们抱怨validate silently bypasses验证:)

希望这有意义