我有一个 Rails 2.3.10 应用程序,它使用 fields_for 在 has_many 关联的属性中包含字段。我在父模型上使用了accepts_nested_attributes_for,它的许多子模型使用以下形式显示:
<% form_for :map do |f| %>
...
<% f.fields_for :markers do |marker_f| %>
<%= marker_f.text_field :lat
<%= marker_f.text_field :long
<% end %>
<% end %>
fields_for 帮助器迭代子标记模型,并为每个生成 text_field 输入。这些文本字段已生成 id 值,例如:
map_markers_attributes_0_lat 和 map_markers_attributes_0_long
map_markers_attributes_1_lat 和 map_markers_attributes_1_long
...
map_markers_attributes_5_lat 和 map_markers_attributes_5_long
id 中的整数是被迭代的记录数组的索引。如何访问此索引值以在我的代码中的其他地方使用?
例如,我想使用 Javascript 访问这些输入的 id 值。
<% form_for :map do |f| %>
...
<% f.fields_for :markers do |marker_f| %>
<%= marker_f.text_field :lat
<%= marker_f.text_field :long
<% content_for :head do %>
<% javascript_tag do %>
$('<%= generate_html_id(marker_f, :lat) %>').observe_field('change');
$('<%= generate_html_id(marker_f, :long) %>').observe_field('change');
<% end %>
<% end %>
<% end %>
<% end %>
我在 html 的头部插入了一些 javascript 来观察该字段是否有任何变化。我需要知道字段的 id 并且我的 generate_html_id 方法应该能够从 marker_f 构建器对象复制字段的 id。但是我不知道如何从 fields_for 获取索引值。
似乎应该有一个 fields_for_with_index 方法,但没有:
<% form_for :map do |f| %>
...
<% f.fields_for_with_index :markers do |marker_f, i| %>
<%= marker_f.text_field :lat
<%= marker_f.text_field :long
<% content_for :head do %>
<% javascript_tag do %>
$('<%= generate_html_id(marker_f, :lat, i) %>').observe_field('change');
$('<%= generate_html_id(marker_f, :long, i) %>').observe_field('change');
<% end %>
<% end %>
<% end %>
<% end %>
顺便说一句,我可以为该字段创建自定义 id 值,但更愿意遵守约定。