Использование значения поля из объекта активной записи, сохраняемого в пользовательском сообщении проверки? - PullRequest
0 голосов
/ 21 марта 2011

Рельсы 2.3.5

У меня проблемы с выяснением, возможно ли это или нет (Google не мой друг сегодня вечером). У меня есть эта проверка (для @ product.save):

validates_uniqueness_of :product_name, :scope => [:category, :catalog_id], :message => "..."

Я бы хотел, чтобы в сообщении об ошибке было указано название категории. Мол, скажем: категория в данном случае это «обувь».

Мне бы хотелось, чтобы ошибка гласила:

"There is already a shoes product in this catalog with the same name."

Например, я пробовал:

:message => "There is already a #{:category} product in this catalog with the same name."

(результат: «В этом каталоге уже есть продукт категории с таким именем»)

и

:message => "There is already a #{@product.catalog} product in this catalog with the same name."

(результат: ноль ошибок)

Ответы [ 2 ]

1 голос
/ 21 марта 2011

В сообщениях проверки по умолчанию используется API I18n , который поддерживает интерполяции.

Однако он может интерполировать только значения, переданные ему валидатором, поэтому единственный способ сделать это - взломать UniquenessValidator , чтобы передать его в качестве опции.

1 голос
/ 21 марта 2011

Попробуйте (не проверено, но один из них должен работать):

:message => "There is already a %{category} product ..."
:message => "There is already a %{value} product ..."
:message => "There is already a %{attribute} product ..."

Если это не работает, переместите сообщение в файл перевода (например, config/locales/en.yml) и используйте t(), чтобы получить сообщение.

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