[英]Adding uniqueness validation for dynamic attributes in rails
我们有一个多租户应用程序,其中每个帐户的验证都不同。 我们可以很容易地实现这一点,如下所示,
module CommonValidator
def add_custom_validation
required_fields = get_required_fields
return if required_fields.blank?
validates_presence_of required_fields.map(&:to_sym)
end
end
class ApplicationRecord < ActiveRecord::Base
include Discard::Model
include CommonValidator
end
然后我们必须添加基于帐户的唯一性验证,所以尝试相同。 但得到未定义的方法错误。 有什么办法可以让我完成这项工作吗?
module CommonValidator
def add_custom_validation
unique_fields = ['first_name']
validates_uniqueness_of unique_fields.map(&:to_sym) if unique_fields.present?
end
end
validates_uniqueness_of
实际上是一个 class 方法(在ActiveRecord::Validations::ClassMethods
中定义),因此您无法从 ZA8CFDE6331BD59EB2AC96F8911ZC4 的上下文中调用它。
而validates_presence_of
既是一个辅助方法,也是一个 class 方法(在ActiveModel::Validations::HelperMethods
和ActiveRecord::Validations::ClassMethods
)。
如果您想使用唯一性验证器,您也可以将add_custom_validation
定义为 class 方法,然后您应该可以使用它。 就像是,
require 'active_support/concern'
module CommonValidator
extend ActiveSupport::Concern
included do
add_custom_validation
end
class_methods do
def add_custom_validation
required_fields = get_required_fields # This will also need to be a class method now
return if required_fields.blank?
validates_uniqueness_of required_fields.map(&:to_sym)
end
end
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.