【发布时间】:2014-03-31 20:01:43
【问题描述】:
我刚刚遇到了 Rails 问题,我想用它们来验证我的模型。但是我希望验证是通用的,以便仅当我关注的类具有该属性时才使用验证。我认为这很容易,但我尝试了很多方法,比如使用 column_names、constantize、send 和许多其他方法,但没有任何效果。正确的方法是什么?代码:
module CommonValidator
extend ActiveSupport::Concern
included do
validates :email, presence: { message: I18n.t(:"validations.commons.email_missing") },
format: { with: /\A[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\z/i,
message: I18n.t(:"validations.commons.email_wrong_format"),
allow_blank: true } if self.column_names.include? :email
end
end
class Restaurant < ActiveRecord::Base
include CommonValidator
.
.
.
end
Restaurant 当然有 email 属性。是否可以检查包含我关注的类中是否存在属性?我想将我的 CommonValidations 包含到许多没有电子邮件属性的模型中。我正在使用 Rails 4。
【问题讨论】:
-
这是一个非常懒惰和脆弱的模式/技术。你最好创建一个
EachValidator并在每列中使用它,例如validates :email, email_address: true。
标签: ruby-on-rails validation activesupport-concern