Подтвердить что ты не робот

Как настроить сообщение об ошибке проверки активизации rails для отображения значения атрибута

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

name "some name" has already been taken

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

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

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

4b9b3361

Ответ 1

2 вещи:

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

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

validates_uniqueness_of :name, :message => '%{value} has already been taken'

Ответ 2

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

  • Символ вдоль строк :activerecord.errors.models.user.attributes.name.taken
  • Хэш, который выглядит примерно так: {: model = > "Пользователь",: attribute = > "Name",: value = > "My Name" }

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

validates_uniqueness_of :name, 
                        :message => Proc.new { |error, attributes| 
                          "#{attributes[:value]} has already been taken." 
                        }

Ответ 3

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

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