“验证”和“验证”之间有什么区别?

问题描述 投票:49回答:2

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

validate :field, presence: true

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

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

You need to supply at least one validation

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

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

ruby-on-rails validation
2个回答
65
投票

validates此方法是所有默认验证器和以“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

9
投票

我相信:validate声明用于自定义验证,其中:validates用于字段上的presence, uniqueness etc等通用验证

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

def field 

end

在你的object。由于Rails为每个数据库attr_accessor定义了field,所以validate :field会调用field的读者方法。

如果验证函数返回true或者如果有error对象,即object.errors不为空,那么该对象被认为是valid?

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

希望这是有道理的

© www.soinside.com 2019 - 2024. All rights reserved.