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