“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_accessor , validate :field将调用field的读取方法。
如果validation函数返回true或者有error对象,即object.errors不为空,那么该对象被认为是valid?
因此,在ligthouse问题的原因,他们抱怨validate silently bypassesvalidation:)
希望这是有道理的