0

次のようなネストされたフォームがあります。

<% form_for setup_training(@training), :url => admin_trainings_path, :html => { :class => :form } do |f| -%>
<!-- begin of form -->
<!-- content of :partial => "day_form" -->
<% f.fields_for :days do |days_form| %>
    <%= render :partial => "admin/days/form_inner", :locals => { :f => days_form }%>    
<% end %>
<!-- end of content of :partial => "day_form" -->
<%=  link_to_function("[+] Ajouter une date", nil, :id => "add-place-and-dates-link") do |page|
    page.insert_html :bottom, "place-and-dates-inner", :partial => "day_form", :locals => { :f => f }
end %>

<% end -%>

ページを初めてロードしたとき、最初の fields_for ブロックの ID は 0 です。

初めて「日付を追加」をクリックすると、新しい fields_for ブロックが id = 1 で作成されます。

次に、「日付を追加」をクリックするたびに、新しい fields_for ブロックが表示されますが、ID は 1 のままです。

HTML の例はより明示的かもしれません。ここに私が得た出力があります:

<!-- This part is generated when i display /new, id is 0 -->
<label class="label" for="training_days_attributes_0_place_id">Lieu</label>
<input class="text_field" id="training_days_attributes_0_place_id" name="training[days_attributes][0][place_id]" size="30" type="text">

<!-- This part is generated when i click on "add a new date", id is 1 -->
<label class="label" for="training_days_attributes_1_place_id">Lieu</label>
<input class="text_field" id="training_days_attributes_1_place_id" name="training[days_attributes][1][place_id]" size="30" type="text">

<!-- This part is generated when i click on "add a new date" a second time, id is 1, but it should be 2 --> 
<label class="label" for="training_days_attributes_1_place_id">Lieu</label>
<input class="text_field" id="training_days_attributes_1_place_id" name="training[days_attributes][1][place_id]" size="30" type="text">

助けてくれてありがとう!

4

1 に答える 1

0

ページ ソースのインライン JavaScript を見ると、link_to_function に場所と日付の内部コンテナーに挿入される静的な html が含まれていることがわかります。サーバー上で構築され、ユーザーに送信されたため、これは変更されません。

これを修正するには、以前に place-and-dates-inner に挿入されたコンテナーの数をクライアント側でカウントし、それに応じてテンプレートでインクリメントすることをお勧めします。この種のインラインの link_to_function は、私が正直に言うといつも嫌いでした。

于 2010-08-24T15:39:40.757 に答える