У меня есть приложение Rails 2.3.10, которое использует fields_for для включения полей в атрибуты ассоциации has_many.Я использую acceptpts_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.В этих текстовых полях были сгенерированы значения идентификаторов, такие как:
map_markers_attributes_0_lat и map_markers_attributes_0_long
map_markers_attributes_1_lat и map_markers_attributes_1_l1
1015 *1012* 1015 *1012* 1015 *1012* 1012 *1012* 1012 *1012* 1012 *1012* 1012 *1012* 1012 *1012* 1012 *1012* 1012 *1012* 1012 *1012* 1012 *1012* 1012 *1012* 1012 *1012* 1012 *1012* 1012 *1012* 1012 *1012* 1012 *1012* 1012 *1012* 1012 *1012* 1012 *1012* 1012 *1012* 1012 *1012* 1012 1012 *1012* 1012 *1015* 1012 *1015* ...
map_markers_attributes_5_lat и map_markers_attributes_5_long
Целое число в id - это индекс массива записей, который повторяется.Как получить доступ к этому значению индекса для использования в другом месте моего кода?
Например, я хочу использовать Javascript для доступа к значениям идентификатора на этих входах.
<% 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 %>
Я вставляю некоторый javascript в заголовок html, чтобы наблюдать за полем для любых изменений.Мне нужно знать идентификатор поля, и мой метод generate_html_id должен иметь возможность реплицировать идентификатор поля из объекта построителя marker_f.Однако я не знаю, как получить значение индекса из 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 для поля, но предпочли бы придерживаться соглашений.