一意

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、if::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