Как настроить сообщение об ошибке проверки активизации rails для отображения значения атрибута
Когда пользователь пытается создать запись с уже существующим именем, я хочу показать сообщение об ошибке, например:
name "some name" has already been taken
Я пытаюсь сделать:
validates_uniqueness_of :name, :message => "#{name} has already been taken"
но это выводит имя таблицы вместо значения атрибута name
Ответы
Ответ 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., но в любом случае вы можете создать свою собственную собственную проверку, которая будет выполнять то, что вам нужно.