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

发布于 2024-11-07 19:09:40 字数 923 浏览 1 评论 0原文

我正在尝试编写一个自定义验证器来检查输入文本字段的单词数。

我试图遵循 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 识别我的验证器?

系统规格: 苹果操作系统 10.6.7 导轨3.0.4 红宝石 1.9.2p136

I'm trying to write a custom validator that will check for the number of words entered into a text field.

I was trying to follow the example in railscasts episode 211 - http://railscasts.com/episodes/211-validations-in-rails-3

So I made a file /lib/word_limit_validator.rb and copied in the same code from the tutorial. I know that this code doesn't count the number of words, I am just trying to use it because I know how it is supposed to behave.

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

Here's the line I used in my validation:

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

When I tried to load the form I got the following error:

Unknown validator: 'word_limit'

How do I get rails to recognize my validator?

System spec:
Mac OS 10.6.7
Rails 3.0.4
ruby 1.9.2p136

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

不即不离 2024-11-14 19:09:40

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

You could also create an app/validators directory in your rails project and put your custom validators there. This way they will automatically be loaded.

一抹淡然 2024-11-14 19:09:40

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

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

Files in lib/ aren't autoloaded anymore in Rails. So, you have a few options.

  • You can add lib to your autoload paths in your application.rb:
    config.autoload_paths += %W( #{config.root}/lib )
  • You can include by adding file with something like this to config/initializers:
    require File.join( Rails.root, 'lib', 'word_limit_validator')
  • If you only need it one place, you can just put it in the same file as your model.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文