我使用以下方法为对象添加了验证:
validate :field, presence: true
我发现他们没有给出错误信息。我将它们更改为validates
并收到错误消息。 This ticket是相关的。
我尝试使用validates
添加自定义验证并出现错误:
You need to supply at least one validation
我将它更改为validate
,一切都按预期进行。
我的理解是使用validates
进行常规验证,validate
使用自定义验证。是对的吗?还有其他我应该知道的部分吗?有没有办法让第一个问题大声失败而不只是验证一切?
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
我相信: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
验证:)
希望这是有道理的