Всем известно как изменить текст сообщения об ошибке валидации модели. Но не всем известен трюк, как изменить само название атрибута, которое будет отображаться в сообщении об ошибке. Рельсы, к сожалению, нам не предоставляют простого пути решения.

Итак, проблема:

Сообщение об ошибке на русском языке, в то время как название атрибута на английском (причём часто на ломаном английском, потому-что название определяется автоматом по названию поля в базе).

Для того чтобы решить эту проблему, нам понадобиться один маленький файлик — humanized_attributes.rb. Бросаем его в lib/ и подключаем в environment.rb.

Далее в нашей модели создаём константу HUMANIZED_ATTRIBUTES:

class User < ActiveRecord::Base

  HUMANIZED_ATTRIBUTES = {
    :login => "Имя пользователя" 
  }

  validates_presence_of :login, :message => 'отсутствует'

end

И вуаля:

На самом деле это удобно не только для русифицирования атрибутов, но и когда заказчик хочет чтобы «login» отображался как «user name».

Для пущего удобства, можно обернуть всё это дело плугином с каким-нибудь прикольным DSL, вместо константы.

4 комментария:

  1. pahanix:

    Я когда-то написал прототип плагина с похожим функционалом, но потом наткнулся на следующий замечательный плагин

    http://wiki.rubyonrails.org/rails/pages/Custom+Error+Message

    После установки достаточно начать сообщение с символа

    validates_presence_of :login, :message => 'Имя пользователя отсутствует'

  2. Cheba:

    MVC violation.

  3. Dima Sabanin:

    Someone, please! Call the MVC authorities.

  4. victor:

    2pahanix:

    Хех, как раз то, что нужно ) Немного пропатченный вариант - http://github.com/gumayunov/custom-err-msg/tree

Извините, но комментарии для этой статьи уже закрыты.