2

我创建了一个自定义的 Rails 验证器,我命名URLValidator它来验证 URL。这似乎符合Rail 对驼峰式缩写词的命名约定

在我的模型中,我正在验证我的 URL,如下所示:

validates :url, :presence => true, :url => true

当我运行测试时,出现以下错误:

`rescue in block in validates': Unknown validator: 'UrlValidator' (ArgumentError)

有什么方法可以让 Rails 使用正确的约定或指定我想用于 :url 的自定义验证器的名称?

4

1 回答 1

4

您的验证器应命名为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
于 2013-02-16T09:22:52.047 回答