我试图弄清楚如何创建一个共享的自定义验证,该验证可以在放置在lib / validations.rb文件夹中的模型中使用。
module Validations
extend ActiveSupport::Concern
# included do
def email_format_validation
if self.email.present?
if !validates_format_of :email, with: email_regex
self.errors.add(:email, "doesn't exist")
end
end
end
def email_regex
/\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i
end
end
因此,在我的模型中,这允许我这样做:
validate :email_format_validation
在其他模型中,我试图仅致电email_regex
:
validate :user_email, with: email_regex
会产生以下错误:
undefined local variable or method `email_regex' for #<Class....>
我尝试在模型中使用include Validations
,extend Validations
,require 'validations'
等,但是没有运气。我还尝试过使用class << self
块将模块方法放在included do
内,将方法设置为self.email_regex
并调用Validations.email_regex
,但似乎没有任何效果。
答案 0 :(得分:2)
我尝试了以下方法,并且对我有用:
在模型/问题中创建了validates.rb
module Validations
extend ActiveSupport::Concern
def email_format_validation
if self.email.present?
if !validates_format_of :email, with: email_regex
self.errors.add(:email, "doesn't exist")
end
end
end
def email_regex
/\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i
end
end
在模型中:
include Validations
class User < ApplicationRecord
validate :email_format_validation
validates :user_email, with: :email_regex
end
user_email是字段名称
答案 1 :(得分:0)
您是否尝试过使用require_relative验证
答案 2 :(得分:0)
从 Rails 3 开始,您还可以使用 validates_with:
return template.evaluate().setTitle('GPS - Visor Gestión de Solicitudes - Desarrollo').setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
这允许您例如轻松使字段名称动态化。