我创建了一个自定义Rails验证程序,我将其命名为URLValidator
以验证URL。这似乎与Rail's naming conventions for acronyms in camel case一致。
在我的模型中,我正在验证我的URL如下:
validates :url, :presence => true, :url => true
当我运行测试时,我收到以下错误:
`rescue in block in validates': Unknown validator: 'UrlValidator' (ArgumentError)
有什么方法可以让Rails使用正确的约定或指定我想用于的自定义验证器的名称:url?
答案 0 :(得分:2)
您的验证者应该被命名为UrlValidator
(camelized 'url'
的结果):
# Validator for the `url` attribute
class UrlValidator< ActiveModel::EachValidator
def validate_each(record, attribute, value)
# to be implemented
end
end
def Foo < ActiveRecord::Base
validates :url, :presence => true
end
或者,要坚持使用URLValidator
这个名称,您可以使用validates_with
:
class URLValidator< ActiveModel::EachValidator
def validate(record)
# check on record.url, to be implemented
end
end
def Foo < ActiveRecord::Base
validates_with URLValidator
end
或更通用的版本(如果属性的名称不总是url
)
class URLValidator< ActiveModel::EachValidator
def validate(record)
value = record.send(options[:on])
# check value, to be implemented
end
end
def Foo < ActiveRecord::Base
validates_with URLValidator, :on => :url
end