添加范围到 ruby gem 唯一性验证
Adding a scope to ruby gem validation of uniqueness
acts-as-taggable-on gem 有一个内置的唯一性验证:
validates_uniqueness_of :name, if: :validates_name_uniqueness?
def validates_name_uniqueness?
true
end
如何向此验证添加范围?
我想添加 scope: :user_id
但不知道如何编辑 gem 源代码。
我能够在 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
acts-as-taggable-on gem 有一个内置的唯一性验证:
validates_uniqueness_of :name, if: :validates_name_uniqueness?
def validates_name_uniqueness?
true
end
如何向此验证添加范围?
我想添加 scope: :user_id
但不知道如何编辑 gem 源代码。
我能够在 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