“validation”和“validation”之间有什么区别?

背景故事:

我正在使用Rails 3.2.13。

我使用validate :field, presence: true向我的一个对象添加validation。 当我去testing这些时,我发现他们实际上没有给出错误信息。 我改变他们validates并得到错误信息。 这张票是相关的,这已经有一段时间了。

我试图添加一个自定义validation与validates并得到一个错误You need to supply at least one validation – 将其更改为validate ,一切按预期进行。

问题:

我目前的理解是使用“正常”validationvalidation,但与自定义validate 。 是对的吗? 还有其他的东西我应该知道吗? 有没有第一个问题“大声”失败,而不是只是validation一切?

谢谢!

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

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

validation ,向类中添加validation方法或块。 当重写validate实例方法变得太笨重时,这是非常有用的,而且您正在寻找更多描述性的validation声明。

 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声明用于自定义validation,其中as :validates用于通用validation,例如字段上的presence, uniqueness etc

validate方法使用参数的名字查找一个方法,也就是说,如果你使用validate :field它会查找

 def field end 

在你的object 。 由于Rails为每个数据库field定义了一个attr_accessorvalidate :field将调用field的读取方法。

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

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

希望这是有道理的