Rails I18n accepts_nested_attributes_for и error_messages_for

У меня две модели

class SurveyResponse
  has_many :answers, :class_name => SurveyResponseAnswer.name
  accepts_nested_attributes_for :answers
end

class SurveyResponseAnswer
  belongs_to :survey_response
  validates_presence_of :answer_text
end

В моей вложенной форме, если проверка не выполняется, я получаю эту ошибку, отображаемую на экране:

"ответ на текст ответа не может быть пустым"

Я успешно настроил имена атрибутов с помощью rails I18n. Он не ведет себя точно так, как я ожидал бы. Ниже приведенный файл yml не влияет на то, как печатается имя атрибута в error_messages_for

en: 
  activerecord:
    models:
      survey_response:
        answers: "Response"

Но если из script/console я попробую   SurveyResponse.human_attribute_name ( "ответы" )

Я получаю ожидаемый результат "Ответ".

Что бы я хотел сделать, это сообщение об ошибке проверки:

"Текст ответа ответа не может быть пустым". Любые идеи, что мне нужно исправить?

Ответы

Ответ 1

Попробуйте следующее:

en: 
  activerecord:
    models:
      survey_response:
        answers:
          answer_text: "Response"

Я использую Rails 3, и это работает для меня (мой i18n файл немного отличается, используя "атрибуты" вместо моделей. Я не знаю, работает ли это в версии 2.3)

en: 
  activerecord:
    attributes:
      survey_response:
        answers:
          answer_text: "Response"

До этого я пытался создать атрибут в yml под названием "answers_answer_text", но он не работал.

Надеюсь, это решит вашу проблему.

Ответ 2

Как и в случае с Rails 3.2.0, i18n yaml изменился на

en: 
  activerecord:
    attributes:
      survey_response:
        foo: "Foo"
      survey_response/answers:
        answer_text: "Response"

(Обратите внимание на косую черту). Это также позволяет вам определять имя атрибута в самой коллекции, например

en: 
  activerecord:
    attributes:
      survey_response:
        foo: "Foo"
        answers: "Ripostes"
      survey_response/answers:
        answer_text: "Response"

Источник: https://github.com/rails/rails/pull/3859