Ruby on rails 什么';这两者之间的区别是什么;“验证”;及;验证“;?

Ruby on rails 什么';这两者之间的区别是什么;“验证”;及;验证“;?,ruby-on-rails,validation,Ruby On Rails,Validation,我使用以下方法向对象添加了验证: validate :field, presence: true 我发现他们没有给出错误消息。我将它们更改为验证,并收到了错误消息。这是相关的 我试图使用validates添加自定义验证,但出现错误: You need to supply at least one validation 我将其更改为“验证”,一切按预期进行 我的理解是将验证与常规验证一起使用,将验证与自定义验证一起使用。是这样吗?还有什么我应该知道的吗?有没有办法让第一个问题大声失败,而不仅仅

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

validate :field, presence: true
我发现他们没有给出错误消息。我将它们更改为
验证
,并收到了错误消息。这是相关的

我试图使用
validates
添加自定义验证,但出现错误:

You need to supply at least one validation
我将其更改为“验证”,一切按预期进行


我的理解是将
验证
与常规验证一起使用,将
验证
与自定义验证一起使用。是这样吗?还有什么我应该知道的吗?有没有办法让第一个问题大声失败,而不仅仅验证所有内容?

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

validates :title, :body, :presence => true
验证,将验证方法或块添加到类中。当覆盖validate实例方法变得过于笨拙,并且您正在寻找更具描述性的验证声明时,这非常有用

validate :must_be_friends

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

我相信
:validate
声明用于自定义验证,其中as
:validates
用于通用验证,如字段上的
存在性、唯一性等

validate
方法查找具有参数名称的方法,即。 如果执行
validate:field
,它将查找

def field 

end
在您的
对象上
。由于Rails为每个数据库
字段定义了
attr\u访问器
验证:字段
将调用
字段
的读卡器方法

如果验证函数返回
true
或存在
error
对象,即
对象。errors
不为空,则该对象被视为
有效?

因此,
lighouse
问题的原因是,他们抱怨
validate
悄悄绕过了验证:)


希望这有意义

也许一个是自定义验证语法
validate
,另一个是通用验证
validates
syntax@Viren-我只是想知道我是否错过了什么。我无法找到对这两个问题的明确解释,我希望他们能提供答案。我同意,这是到目前为止我发现的唯一不同之处。我在回答这个问题时考虑到了灯塔的问题:)出于好奇,你可以将链接附加到哪个文档上,并且你测试过了吗?它不起作用。修改了我的回答:)这个:我读了下面的例子,这是我理解的,但看起来我错了。更具描述性的部分哦,我不知道“以‘validator’结尾的自定义验证器类”这一点,知道这一点很好。我会把这个问题留长一点,以防出现其他答案,但我稍后会回来接受。谢谢你的解释!自定义验证器非常容易理解,您看到的常规验证器(例如
validates:title,:presence=>true
)只使用Rails附带的自定义验证器。请参阅:。您可以在
validates
方法的源代码中看到这是如何工作的:上面的代码是否验证了commenter是否属于commentee?啊,感谢您的解释!我没有这样想过,但这完全有道理。它还解释了为什么您不能让
:validate
以“响亮”的方式失败,因为这是一个非常合理的调用(甚至可以说是“valid”…)。我没有那样想过。这非常重要。严重意外的结果只差一个字符了。感谢您不仅发布了“抓住你了”,而且发布了背后的科学知识。干杯rails API在这方面令人困惑——验证方法的无声失败是有问题的,特别是如果它们没有被测试捕获的话。