Note: I am using Rails 2.3.10.
Normally, you can use Rails I18n system to generate label text.
For example, suppose you have a Person class with a name attribute. And
this ERB:
<%= form_for @person do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>
<% end %>
And youd construct your en.yml like so:
en:
helpers:
label:
name: your name
However, this doesnt work very well with related objects and
accepts_nested_attributes_for. Suppose you have the same Person class as
before. And person has_many :activities (likewise, activity belongs_to
:person) and accepts_nested_attributes_for :activities.
Now your ERB looks like this:
<%= form_for @person do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>
<% f.fields_for :activities do |a| %>
<%= l.label :difficulty %>
<%= l.text_field :difficulty %>
<% end %>
<% end %>
Various combinations indentation of person / activities / difficulty in
my en.yml file didnt work. So I looked inside rails to see whats going
on.
The relevant code is in
actionpack-2.3.10/lib/action_view/helpers/form_helper.rb. The method
used is
def to_label_tag(text = nil, options = {})
on line 758.
And the code doing the work is:
content = if text.blank?
i18n_label =
I18n.t(“helpers.label.#{object_name}.#{method_name}”, :default => )
i18n_label if i18n_label.present?
else
text.to_s
end
The problem is you end up with a set of labels like:
helpers.label.person[activities_attributes][0].difficulty
helpers.label.person[activities_attributes][1].difficulty
helpers.label.person[activities_attributes][2].difficulty
Is there a way you can put wildcards in YAML? If not, is there some
other way around this limitation? If not, this seems like a bug in
Rails, and Ill file a lighthouse ticket.
Paul