2012-02-13 8 views
7

誰かがRailsでモデルの関連付けをどのように翻訳するかのヒントがありますか?Railsモデルの関連付けを翻訳する - 動作しない

たとえば、私はPersonモデルを持っています。これにはPhoneがたくさんあります。しかし、人は少なくとも1つの電話を持っている必要があります。私はその検証を翻訳することができません。私は何ができる最善のは、このでした:

validates_presence_of :phones, :message => "At least one phone is required." 

そして、私のYAMLに、私は%{attribute}を省略し、この行を置き換える:

format: ! '%{message}' 

だけ私のメッセージが表示されている。この方法は、と私は未を避けます表示される変換済みフィールド名。

いくつかの宝石は単に私に:message => "something describing the error"を渡すことを許可しないので、私は多くの頭痛を引き起こしています。だから私はYAMLを通してすべてのエラーメッセージを設定したかったのです。

また、一部のモデルでは属性を変換できますが、他のモデルではそうではありません。例:

activerecord: 
    attributes: 
    additional_info: 
     account_manager: "Manager" 

これは機能します。私は私のフォーム "マネージャー"で見ることができます。しかし、このフィールドにエラーがあると、Railsはそれを"Additional info account manager can't be blank"と表示します。

私はこれを試してみました:

activerecord:   
    errors: 
    models: 
     additional_info: 
     attributes: 
      account_manager: "Manager" 

しかし、運。

私はドキュメントを読みましたが、なぜそれが起こっているのかという手がかりはありません。

答えて

9

Rails 3.2ではこの動作が変更されました。私が以前に投稿した方法は廃止されました。

ここで、関連付けを変換するために、すべてを入れ子にする代わりにスラッシュを追加する必要があります。だからではなく、この:

activerecord: 
     attributes: 
     person: 
      additional_info: 
      account_manager: "Manager" 

正しいは今です:

activerecord: 
     attributes: 
     person: 
      additional_info/account_manager: "Manager" 

はまた、私はhas_many団体がそれとは異なって翻訳されていることを考え出しました。あなたがそれらを翻訳したい場合は、次の例では、役立つことがあります。代わりにモデル名の

activerecord: 
     attributes: 
     emails: 
      address: "E-mail field" 

を、私は上記のやったように、あなたは、この場合emailsには、関連名を渡す必要があります。

チェックこのコメントおよび詳細は要求引っ張っ:ここ

https://github.com/rails/rails/commit/c19bd4f88ea5cf56b2bc8ac0b97f59c5c89dbff7#commitcomment-619858

https://github.com/rails/rails/pull/3859

+0

私はそれを見つける方法については運のようなものを考えてではなく、運アイテムの正確な位置としていませんでした、ありがとう!本当に感謝 – Alexis

7

はRailsの4のための有効なキーのパスです。1:だから

# Basic Attribute on Model 
activerecord: 
    attributes: 
    #{model_class.model_name.i18n_key}: 
     #{attribute_name}: 
     "Localized Value" 

# Attribute on Nested Model 
activerecord: 
    attributes: 
    #{model_class.model_name.i18n_key}/#{association_name}: 
     #{attribute_name}: 
     "Localized Value" 
    #{association_name}: 
     #{attribute_name}: 
     "Fallback Localized Value" 

、このモデル(:personi18n_keyを有する)与えられた:あなたのモデルがある場合

activerecord: 
    attributes: 
    person: 
     first_name: 
     "My Name" 
    person/friends: 
     first_name: 
     "My Friend's Name" 
    friends: 
     first_name: 
     "A Friend's Name" 

class Person 
    has_many :friends 
end 

あなたはこれらのロケールの定義を持っていると思います名前空間:

class MyApp::Person 
    has_many :friends 
end 

i18n_key:my_app/personになり、あなたの/キーを開始して着用する:

activerecord: 
    attributes: 
    my_app/person: 
     first_name: 
     "My Name" 
    my_app/person/friends: 
     first_name: 
     "My Friend's Name" 
    friends: 
     first_name: 
     "A Friend's Name" 
関連する問題