Rails 3 I18n标签转换为has_many关系中的nested_attributes

时间:2010-12-18 20:15:42

标签: internationalization ruby-on-rails-3 nested-attributes

使用:Rails 3.0.3,Ruby 1.9.2

这是关系:

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

现在,当我尝试在I18n中自定义contact_method标签时,它无法识别它。

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

我也尝试过:

person[contact_method_attributes]

这适用于1-1关系,例如

person[wife_attributes]: 
  name: 'My wife'

但不是person[wives_attributes]

提前致谢

2 个答案:

答案 0 :(得分:4)

我是这样做的:

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

当你有无限的选项时,哪个好但不理想..我只想在表单构建器中指定一个自定义翻译键:)

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

编辑: 不知道这是一个新功能,但似乎像一个魅力这样做:

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

答案 1 :(得分:0)

在我的Rails 3.2.13应用程序中,属性标签会从嵌入了属性的模型中自动获取。请注意,我正在使用belongs_to模型的嵌套属性,但它可能也会以相反的方式工作。

我的工作代码示例:

模特:

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

class Account < ActiveRecord::Base
  has_many :users
end

观点:

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

使用基于

翻译的子域标签呈现视图
activerecord.attributes.account.subdomain

尼斯。 :)

我不确定,但可能需要您使用activerecord路径而不是帮助者路径。