0

acts-as-taggable-on宝石的宝石验证有一个内置的独特性验证:添加范围红宝石独特

validates_uniqueness_of :name, if: :validates_name_uniqueness? 

def validates_name_uniqueness? 
    true 
end 

怎样一个范围添加到这个验证?我想添加scope: :user_id并且不知道如何编辑宝石源代码。

+0

你可能不希望猴子修补宝石,因为这会影响到方法在不同的工作原理您的代码区域。 – cobaltsoda

+0

'validates_uniqueness_of'是一个Rails方法,你可以像这样添加一个范围:'validates_uniqueness_of:name,scope :: user_id,如果:: validates_name_uniqueness?' – cobaltsoda

回答

1

我能解决我的问题,在配置/初始化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