4

Verwendung: Rails 3.0.3 Ruby 1.9.2Rails 3 I18n Label Übersetzung für nested_attributes in has_many Beziehung

Hier ist die Beziehung:

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 

Jetzt, wenn ich versuche, die contact_method Etiketten in I18n anpassen Es erkennt es nicht.

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

Ich habe auch versucht:

person[contact_method_attributes] 

Dies funktioniert gut für 1-1 Beziehungen, z.B.

person[wife_attributes]: 
    name: 'My wife' 

aber nicht person[wives_attributes]

Vielen Dank im Voraus

Antwort

4

Ich tat dies mit:

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

das ist schön, aber nicht ideal, wenn Sie unbegrenzte Möglichkeiten haben .. Ich möchte nur angeben ein benutzerdefinierter Übersetzungsschlüssel im Form Builder :)

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: Sie wissen nicht, ob es ein neues Feature ist, aber scheint wie ein Zauber tun dies funktioniert:

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

In Rails 3.2.12 konnte ich nicht: 'helpers.label.person.contact_method.info' funktionieren, aber: 'helpers.label.person [contact_method_attributes] .info' tut. (Das war für has_one; ich habe nicht mit has_many Beziehung versucht.) – graywh

+0

In Rails 3.1.10 konnte ich bekommen: 'helpers.label.person.contact_methods.info' zu arbeiten, musste aber: 'helpers.label .person [contact_methods_attributes] [new_contact_methods] 'für meine javascript-addable has_many-Verknüpfung. (Die "new_contact_methods" ist ein Platzhalter für die ID, wenn die Vorlage für das Dateninhalt-Attribut meiner Schaltfläche gerendert wird, die die Felder dem DOM hinzufügt.) – graywh

0

In meiner Rails 3.2.13 App die Attribut Etiketten gepflückt werden automatisch aus dem Modell nach oben wessen Attribute sind eingebettet. Bitte beachten Sie, dass ich die Attribute des so genannten goes_to-Modells verschachtele, es funktioniert aber auch andersherum.

Mein Beispiel von Arbeitscode:

Die Modelle:

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

class Account < ActiveRecord::Base 
    has_many :users 
end 

Aussicht:

<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 ... 

Und die Aussicht gemacht wird mit der su bdomain label übersetzt basierend auf

activerecord.attributes.account.subdomain 

Nett. :)

Ich bin mir nicht sicher, aber es könnte erfordern, dass Sie den ActiveRecord Pfad anstelle der Helfer verwenden.

+0

Beachten Sie, dass Rails die Übersetzung im Modell nicht nachschlägt, wenn das Objekt noch nicht existiert ("account_form.object" ist "nil"). –

Verwandte Themen