Rails 3: пользовательское сообщение об ошибке при проверке - PullRequest
5 голосов
/ 21 сентября 2010

Я не понимаю, почему следующее не работает в Rails 3. Я получаю ошибку «неопределенная локальная переменная или метод« custom_message »».

validates :to_email, :email_format => { :message => custom_message }

def custom_message
  self.to_name + "'s email is not valid"
end

Я также попытался использовать: message =>: custom_message вместо того, что было предложено в rails-validation-message-error пост безуспешно.

: email_format - это пользовательский валидатор, расположенный в папке lib:

class EmailFormatValidator < ActiveModel::EachValidator
  def validate_each(object, attribute, value)
    unless value =~ /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i
      object.errors[attribute] << (options[:message] || 'is not valid')
    end
  end
end

Ответы [ 3 ]

1 голос
/ 06 ноября 2010

Просто для справки, это то, что я считаю, происходит. Метод validates - это метод класса, т. Е. MyModel.validates (). Когда вы передаете эти параметры в «validates» и вызываете «custom_message», вы фактически вызываете MyModel.custom_message. Так что вам нужно что-то вроде

def self.custom_message
  " is not a valid email address."
end

validates :to_email, :email_format => { :message => custom_message }

с self.custom_message, определенным до вызова validates.

1 голос
/ 26 сентября 2010

Если кому-то интересно, я придумаю следующее решение моей проблемы:

Модель:

validates :to_email, :email_format => { :name_attr => :to_name, :message => "'s email is not valid" }

lib / email_format_validator.rb:

class EmailFormatValidator < ActiveModel::EachValidator

  def validate_each(object, attribute, value)
    unless value =~ /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i

      error_message = if options[:message] && options[:name_attr]
        object.send(options[:name_attr]).capitalize + options[:message]
      elsif options[:message]
        options[:message]
      else
        'is not valid'
      end

      object.errors[attribute] << error_message
    end
  end
end
0 голосов
/ 07 октября 2010

Возможно, метод "custom_message" должен быть определен выше валидации.

...