Рубин на рельсах.Пользовательское сообщение в пользовательском методе проверки - PullRequest
2 голосов
/ 12 сентября 2010

Я хочу иметь возможность установить пользовательское сообщение в методе проверки модели, чтобы уведомить пользователя о неверных входных данных.

Во-первых, я установил пользовательский класс проверки, в котором я переопределяю метод validate_eachтаким образом, как это рекомендуется в документации рельсов :


# app/models/user.rb

# a custom validator class
class IsNotReservedValidator < ActiveModel::EachValidator
  RESERVED = [
    'admin',
    'superuser'
  ]

  def validate_each(record, attribute, value)
    if RESERVED.include? value
      record.errors[attribute] <<
        # options[:message] assigns a custom notification
        options[:message] || 'unfortunately, the name is reserved'
    end
  end
end

Вторичное, я пытаюсь передать пользовательское сообщение методу validates двумя различными способами:


# a user model
class User < ActiveRecord::Base
  include ActiveModel::Validations

  ERRORS = []

  begin
    validates :name,
      :is_not_reserved => true,
      # 1st try to set a custom message
      :options         => { :message => 'sorry, but the name is not valid' }
  rescue => e
    ERRORS << e
    begin
      validates :name,
        :is_not_reserved => true,
        # 2nd try to set a custom message
        :message         => 'sorry, but the name is not valid'
    rescue => e
      ERRORS << e
    end
  ensure
    puts ERRORS
  end
end

Но ни один из этих методов не работает:


>> user = User.new(:name => 'Shamaoke')
Unknown validator: 'options'
Unknown validator: 'message'

Где и как я могу установить пользовательские сообщения для пользовательских валидаторов?

Спасибо.

Debian GNU /Linux 5.0.6;

Ruby 1.9.2;

Ruby on Rails 3.0.0.

1 Ответ

6 голосов
/ 13 сентября 2010

Прежде всего, не include ActiveModel::Validations, он уже включен в ActiveRecord::Base. А во-вторых, вы не указываете параметры для проверки с помощью ключа :options, вы делаете это с помощью ключа для вашего валидатора.

class User < ActiveRecord::Base
  validates :name,
           :is_not_reserved => { :message => 'sorry, but the name is not valid' }
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...