1

fields_for を使用して has_many 関連付けの属性にフィールドを含める Rails 2.3.10 アプリがあります。親モデルで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 値を作成することもできますが、慣習に従うことをお勧めします。

4

1 に答える 1

0

別の方法として、問題の要素に CSS クラスを割り当て、このクラスのすべての要素を見つけて dom:ready にリスナーを接続することもできます。

于 2011-02-20T22:22:18.457 に答える