添加范围到ruby gem验证唯一性

时间:2016-12-30 12:11:41

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

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

validates_uniqueness_of :name, if: :validates_name_uniqueness?

def validates_name_uniqueness?
  true
end

如何在此验证中添加范围?

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

1 个答案:

答案 0 :(得分: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