Как получить контекст объекта в валидаторе?

#validation #ruby-on-rails-4

#проверка #ruby-on-rails-4

Вопрос:

Используемый валидатор:

   validates :address, :allow_nil => true, :allow_blank => true,
            uniqueness: {
                scope: :some_id,
                message: Proc.new { GenerateCustomMessage },
                strict: SomeException
            },
            :format => {
                :with => proc { |a| Regexp.new(regexp_here) },
                :message =>  proc { |a| "why 'a' is nil but not my object ?" },
                strict: FormatIsInvalid
            }
 

В format validator я не могу получить контекст объекта (a). Как я могу его получить?

Ответ №1:

Я только что добавил пользовательский валидатор

 validates :address, :allow_nil => true, :allow_blank => true,
            uniqueness: {
                scope: :some_id,
                message: Proc.new { GenerateCustomMessage },
                strict: SomeException
            }

  validate :validate_address

  def validate_address
    regex = Regexp.new(regexp_here)
    unless address.blank?
      unless address =~ regex
        message = generate_dynamic_message
        errors.add(:address, message)
      end
    end
  end