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;

我第一次单击“添加日期”时,会创建一个 id = 1 的新 fields_for 块;

然后,每次我点击“添加日期”时,都会显示一个新的 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,该 html 将被插入到 place-and-dates-inner 容器中。这不会改变,因为它是在服务器上构建并发送给用户的。

要解决此问题,您可能最好计算客户端先前已插入 place-and-dates-inner 的容器数量,并在模板中相应增加。老实说,我一直不喜欢这种内联 link_to_function 的东西。

于 2010-08-24T15:39:40.757 回答