Rails I18n принимает_nested_attributes_for и error_messages_for - PullRequest
17 голосов
/ 17 июня 2010

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

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"

Но если из скрипта / консоли я попытаюсь
SurveyResponse.human_attribute_name ("answers")

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

Я хотел бы получить сообщение об ошибке проверки:

«Текст ответа не может быть пустым».Есть идеи, что мне нужно исправить?

Ответы [ 2 ]

55 голосов
/ 21 июня 2012

Начиная с Rails 3.2.0, yaml i18n изменилось на

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

14 голосов
/ 22 июня 2010

Попробуйте это:

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", но он не работал.

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

...