17

私は2つのモデルを持っています

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")を試してみる場合

「Response」の期待通りの結果が得られます。

私がやりたいのは、検証エラーメッセージに次のように表示させることです。

「回答の回答テキストを空白にすることはできません」。私が修正する必要があるアイデアはありますか?

4

2 に答える 2

60

Rails 3.2.0以降、i18nyamlは次のように変更されました。

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

于 2012-06-20T23:31:36.763 に答える
14

これを試して:

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」という属性を作成しようとしましたが、機能しませんでした。

これで問題が解決することを願っています。

于 2010-06-22T16:17:12.893 に答える