我应该在Rails 5中放置自定义验证器?

时间:2017-02-15 15:05:14

标签: ruby-on-rails

我正在尝试为我的应用添加电子邮件自定义验证器;但是,我应该在哪里放置自定义验证器? (我真的不想将这个验证器类放在模型中)是否有用于验证器的cli生成器?

http://guides.rubyonrails.org/active_record_validations.html

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

class Person < ApplicationRecord
  validates :email, presence: true, email: true
end

自定义验证程序的约定位置/路径是什么?

3 个答案:

答案 0 :(得分:22)

我将它们放在/app/validators/email_validator.rb中,验证程序将自动加载。

另外,我不知道你的情况是否合适,但你应该在表格中替换它。如果是这样,则在用户到达您的控制器之前进行第一次验证。

  <div class="field">
    <%= f.label :email %>
    <%= f.text_field :email, required: true %>
  </div>

通过:

  <div class="field">
    <%= f.label :email %>
    <%= f.email_field :email, required: true %>
  </div>

答案 1 :(得分:2)

我的验证器未自动加载。当我输入控制台时,至少没有显示:

> ActiveSupport::Dependencies.autoload_paths

所以,我输入了我的config / application.rb,这一行:

config.autoload_paths += %W["#{config.root}/lib/validators/"]

答案 2 :(得分:0)

在导轨6中,我不得不将它们放入/app/models/concerns中以使其自动加载