как настроить сообщение об ошибке валидации activerecord для отображения значения атрибута - PullRequest
27 голосов
/ 20 мая 2011

Когда пользователь пытается создать запись с уже существующим именем, я хочу показать сообщение об ошибке, например:

name "some name" has already been taken

Я пытался сделать:

validates_uniqueness_of :name, :message => "#{name} has already been taken"

, но выводится имя таблицы вместо значения атрибута name

Ответы [ 3 ]

42 голосов
/ 20 мая 2011

2 вещи:

  1. В сообщениях проверки используется интерполяция в стиле Rails I18n , то есть %{value}
  2. Ключ value вместоname, потому что в контексте интернационализации вас не волнует остальная часть модели.

Итак, ваш код должен быть:

validates_uniqueness_of :name, :message => '%{value} has already been taken'
21 голосов
/ 20 мая 2011

Похоже, вы можете передать сообщение Proc. Когда вы делаете это, вы получаете два параметра:

  1. Символ вдоль линий :activerecord.errors.models.user.attributes.name.taken
  2. Хеш выглядит примерно так: {{model => "Пользователь",: attribute => "Имя",: значение => "Мое имя"}

Таким образом, если вы разрешите два параметра в процедуре, вы можете использовать элемент attributes[:value], чтобы получить имя, которое было использовано:

validates_uniqueness_of :name, 
                        :message => Proc.new { |error, attributes| 
                          "#{attributes[:value]} has already been taken." 
                        }
3 голосов
/ 20 мая 2011

Какую версию Rails вы используете?

Если Rails 3. , тогда, как я понимаю, вы должны использовать :message => '%{value} has already been taken'. Я не уверен насчет Rails 2.3. - но в любом случае вы можете создать свою собственную пользовательскую проверку, которая выполняет то, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...