0

acts-as-taggable-on bijou a une validation unique intégrée:Ajout d'un champ à ruby ​​validation des pierres précieuses de l'unicité

validates_uniqueness_of :name, if: :validates_name_uniqueness? 

def validates_name_uniqueness? 
    true 
end 

Comment puis-je ajouter un champ à cette validation?

Je veux ajouter scope: :user_id et je ne sais pas comment modifier un code source de gemme.

+0

Vous ne voulez pas le singe patcher le joyau, car cela aurait une incidence sur la façon dont la méthode fonctionne dans différents zones de votre code. – cobaltsoda

+0

'validates_uniqueness_of' est une méthode Rails d'ailleurs, vous pouvez ajouter une portée comme ceci:' validates_uniqueness_of: nom, portée:: user_id, if:: validates_name_uniqueness? ' – cobaltsoda

Répondre

1

j'ai pu résoudre mon problème avec l'aide de acts_as_taggable_on.rb fichier dans config/initializers:

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