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