Rails自定义验证器名称错误

时间:2013-02-16 07:35:22

标签: ruby-on-rails

我创建了一个自定义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?

1 个答案:

答案 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

Link to doc

或者,要坚持使用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