2011-01-25 15 views
3

これはしばらく私を悩ませています。この問題はすべてのモデルで発生しますが、例としてクイズの1つを使用します。errors.full_messages:属性名が2回表示される

クイズには、次の検証があります。

validates_presence_of :size, :style 

私は国際化を使用しています、と私は私の翻訳ファイルに次のように設定しています(これらは単に標準エラーメッセージですが、私はそれらを含めました私が検証に失敗する新しいクイズを作る場合は、見て:私は、任意の特定のモデルのためにそれらを上書きしたい場合には、構造を簡単に確認することができますように、私のen.yml)

activerecord: 
    errors: 
    messages: 
     inclusion: "{{attribute}} is not included in the list" 
     invalid: "{{attribute}} is invalid" 
     empty: "{{attribute}} can't be empty" 
     blank: "{{attribute}} can't be blank" 
     record_invalid: "Validation failed: {{errors}}" 

は、問題はこれですquiz.errors.full_messagesで、各エラーメッセージには属性があり、フルメッセージE:メッセージがある理由

>> quiz = Quiz.create 
=> <unsaved quiz object> 
>> quiz.errors.full_messages 
=> ["Size Size can't be blank", "Style Style can't be blank"] 

私は、任意のアイデア誰も、例えば、"Size Size can't be blank"なく"Size can't be blank"

を理解していませんか?

+0

あなたが検証メッセージのそれぞれに '' {{属性}}を追加する必要がある理由、特定の理由がある:?あなたがすべて正しくは次の場所にあり は、あなたのRailsのバージョンからen.ymlを使用し得ることを確認するには 通常、「リストには含まれていません」などのエラーメッセージのみが含まれます。属性はロケールファイルの 'activerecord.errors.full_messages.format'に基づいて自動的に追加されます。デフォルトは'%{attribute}%{message} '' ' – sikachu

+0

Hi Sikachuです。これがベンダーの仕組みにあります。そのファイルの内容をen.ymlファイル(コメントアウト)にコピーした後、コメントを外して必要に応じて修正します。 –

答えて

8

があるにも次のようになります。

en: 
    errors: 
    # The default format to use in full error messages. 
    format: "%{attribute} %{message}" 

そして、あなたの他の翻訳はもう%{attribute}を含めるべきではありません。 lib/ruby/gems/1.8/gems/activemodel-3.0.3/lib/active_model/locale/en.yml

+0

Gertasさん、ありがとうございました。私は、アクティブモデル3ではなくベンダーのレールに基づいていますが(レール2.3.4を使用しています) –

4

私はこれを考え出したし、私はこの問題を抱えていた他のケース誰にそれを自分自身に答えるだろうと思って:

activerecord: 
    errors: 
    full_messages: 
     format: "{{message}}"  
    #define standard error messages, which we can overide on per model/per attribute basis further down 
    messages: 
     inclusion: "{{attribute}} is not included in the list" 
     exclusion: "{{attribute}} is reserved" 

問題があることだった:私は私の翻訳のActiveRecordの部分は、このようにファイルを修正しなければなりませんでしたactiverecord.errors.full_messages.formatキーは「vendor/rails/activerecord/lib/active_record/locale/en.yml」に「{{attribute}} {{message}}」に設定され、メッセージは「{{attribute}}は空白にできません」と設定されました。ですから、 "{{属性}} {{属性}}は空白にできません"というようにfull_messageが出てきました。 "{{message}}"に変更してこれを修正しました。

関連する問題