【问题标题】:Adding a scope to ruby gem validation of uniqueness为 ruby​​ gem 唯一性验证添加范围
【发布时间】:2023-03-05 07:41:01
【问题描述】:

acts-as-taggable-on gem 具有内置的唯一性验证:

validates_uniqueness_of :name, if: :validates_name_uniqueness?

def validates_name_uniqueness?
  true
end

如何向此验证添加范围?

我想添加scope: :user_id,但不知道如何编辑gem源代码。

【问题讨论】:

  • 您可能不想修补 gem,因为这会影响该方法在代码的不同区域中的工作方式。
  • validates_uniqueness_of 是一个 Rails 方法,你可以像这样添加一个范围:validates_uniqueness_of :name, scope: :user_id, if: :validates_name_uniqueness?

标签: ruby-on-rails validation rubygems monkeypatching acts-as-taggable-on


【解决方案1】:

我能够在 config/initializers 中的acts_as_taggable_on.rb 文件的帮助下解决我的问题:

module ActsAsTaggableOn
  class Tag < ::ActiveRecord::Base
    Tag.class_eval do
      _validators.reject!{ |key, _| key == :name }

      _validate_callbacks.each do |callback|
        callback.raw_filter.attributes.delete :name if callback.raw_filter.is_a?(ActiveRecord::Validations::UniquenessValidator)
      end
      validates_uniqueness_of :name, scope: :user_id
    end
  end
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-24
    • 1970-01-01
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    相关资源
    最近更新 更多