我正在尝试为我的应用添加电子邮件自定义验证器;但是,我应该在哪里放置自定义验证器? (我真的不想将这个验证器类放在模型中)是否有用于验证器的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
自定义验证程序的约定位置/路径是什么?
答案 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
中以使其自动加载