4

Utilisation: Rails 3.0.3, Ruby 1.9.2Rails 3 I18n Traduction d'étiquettes pour nested_attributes en relation has_many

Voici la relation:

class Person < ActiveRecord::Base 
    has_many :contact_methods 
    accepts_nested_attributes_for :contact_methods 
end 

class ContactMethod < ActiveRecord::Base 
    attr_accessible :info 
    belongs_to :person 
end 

Maintenant, lorsque je tente de personnaliser les étiquettes de contact_method dans I18n , il ne le reconnaît pas.

en: 
    helpers: 
    label: 
     person[contact_methods_attributes]: 
     info: 'Custom label here' 

J'ai aussi essayé:

person[contact_method_attributes] 

Cela fonctionne très bien pour les relations 1-1, par exemple

person[wife_attributes]: 
    name: 'My wife' 

mais pas person[wives_attributes]

Merci à l'avance

Répondre

4

Je l'ai fait avec:

en: 
    helpers: 
    label: 
     person[contact_methods_attributes][0]: 
     info: 'First custom label here' 
     person[contact_methods_attributes][1]: 
     info: 'Second custom label here' 

Ce qui est agréable, mais pas idéal quand vous avez des options illimitées .. Je voudrais simplement préciser une clé de traduction personnalisée dans le générateur de formulaire :)

en: 
    helpers: 
    label: 
     person[contact_methods_attributes][any]: 
     info: 'Custom label here' 

<% fields_for :contact_methods do |builder| %> 
    <%= builder.label :info, t("helpers.person[contact_methods_attributes][any].info") %> 
    <%= builder.text_field :info %> 
<% end %> 

EDIT: Je ne sais pas si c'est une nouvelle fonctionnalité, mais semble fonctionner comme un charme faisant:

en: 
    helpers: 
    label: 
     person: 
     contact_methods: 
      info: 'Custom label here' 
+0

Dans Rails 3.2.12, je n'ai pas pu obtenir 'helpers.label.person.contact_method.info', mais: 'helpers.label.person [contact_method_attributes] .info' fait. (C'était pour has_one, je n'ai pas essayé avec la relation has_many.) – graywh

+0

Dans Rails 3.1.10, je pouvais obtenir: 'helpers.label.person.contact_methods.info' pour travailler, mais je devais utiliser: 'helpers.label .person [contact_methods_attributes] [new_contact_methods] 'pour mon association has_many javascript-addable. (Le "new_contact_methods" est un espace réservé pour l'ID lorsque le modèle est rendu pour l'attribut de contenu de données de mon bouton qui ajoute les champs au DOM. – graywh

0

Dans mes Rails 3.2.13 application les étiquettes d'attribut sont cueillies automatiquement à partir du modèle dont les attributs sont incorporés. Veuillez noter que je suis en train d'imbriquer des attributs du modèle belongs_to, mais cela pourrait aussi fonctionner dans l'autre sens.

Mon exemple de code de travail:

Les modèles:

class User < ActiveRecord::Base 
    belongs_to :account 
    accepts_nested_attributes_for :account 
    # ... 
end 

class Account < ActiveRecord::Base 
    has_many :users 
end 

La vue:

<h2><%= t(:sign_up) %></h2> 

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %> 
    <%= devise_error_messages! %> 

    <div><%= f.label :email %><br /> 
    <%= f.email_field :email %></div> 

    <%= f.fields_for :account do |account_form| %> 

    <div><%= account_form.label :subdomain %><br /> 
    <%= account_form.text_field :subdomain %>.<%= request.host %> <span class="hint"></span></div> 

    <% end %> 

translations_de.yml:

activerecord: 

models: 
    account: Konto 
    user: Benutzer 

attributes: 
    account: 
    name: Firmenname 
    subdomain: Subdomain 
    users: Benutzer 

    user: 
    # ... no sign of subdomain here ... 

Et la vue est rendue avec le su étiquette bdomaine traduite basée sur

activerecord.attributes.account.subdomain 

Nice. :)

Je ne suis pas sûr mais cela pourrait vous obliger à utiliser le chemin d'activationAccord au lieu de celui des assistants.

+0

Notez que si l'objet n'existe pas encore ('account_form.object' est' nil'), Rails ne recherchera pas la traduction dans le modèle. –

Questions connexes