“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 bypasses
validation:)
希望这是有道理的