module ActiveForm::ValidateUniqueness::ClassMethods

Public Instance Methods

validates_uniqueness_of(attribute, model_name, options = {}) click to toggle source
# File lib/activeform-rails/validate_uniqueness.rb, line 10
def validates_uniqueness_of(attribute, model_name, options = {})
  validates_each attribute, options do |form, attr, value|
    @form = form
    @model = form.send(model_name)
    @klass = @model.class
    @hash = { attribute => value }
    add_error_message(attribute) if another_model?
  end
end

Private Instance Methods

add_error_message(attribute) click to toggle source
# File lib/activeform-rails/validate_uniqueness.rb, line 38
def add_error_message(attribute)
  @form.errors.add(attribute, error_message)
end
another_model?() click to toggle source
# File lib/activeform-rails/validate_uniqueness.rb, line 22
def another_model?
  @model.persisted? ? another_model_without_itself : any_model?
end
another_model_without_itself() click to toggle source
# File lib/activeform-rails/validate_uniqueness.rb, line 26
def another_model_without_itself
  @klass.where(@hash).to_a.delete_if { |m| m.id == @model.id }.count >= 1
end
any_model?() click to toggle source
# File lib/activeform-rails/validate_uniqueness.rb, line 30
def any_model?
  @klass.exists?(@hash)
end
error_message() click to toggle source
# File lib/activeform-rails/validate_uniqueness.rb, line 34
def error_message
  I18n.t('activerecord.errors.messages.exclusion')
end