在Rails 3中编写自定义验证器

时间:2011-05-16 23:10:58

标签: ruby-on-rails-3 validation

我正在尝试编写一个自定义验证程序,用于检查输入到文本字段中的单词数。

我试图按照railscasts第211集 - http://railscasts.com/episodes/211-validations-in-rails-3

中的示例进行操作

所以我创建了一个文件/lib/word_limit_validator.rb并从教程中复制了相同的代码。我知道这段代码不计算单词的数量,我只是试图使用它,因为我知道它应该如何表现。

class WordLimitValidator < ActiveModel::EachValidator  
  def validate_each(object, attribute, value)  
    unless value =~ /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i  
      object.errors[attribute] << (options[:message] || "is not formatted properly")  
    end  
  end  
end

以下是我在验证中使用的行:

  validates :body, :presence => true,
                   :word_limit => true

当我尝试加载表单时出现以下错误:

  

未知验证者:'word_limit'

如何让rails识别我的验证器?

系统规格: Mac OS 10.6.7 Rails 3.0.4 红宝石1.9.2p136

2 个答案:

答案 0 :(得分:10)

您还可以在rails项目中创建 app / validators 目录,并将自定义验证器放在那里。这样他们就会自动加载。

答案 1 :(得分:1)

在Rails中,lib /中的文件不再自动加载。所以,你有几个选择。

  • 您可以将lib添加到application.rb中的自动加载路径: config.autoload_paths += %W( #{config.root}/lib )
  • 您可以通过向config / initializers添加类似这样的文件来包含: require File.join( Rails.root, 'lib', 'word_limit_validator')
  • 如果您只需要一个地方,您可以将它放在与您的模型相同的文件中。