Вложенная форма и функция link_to_function - PullRequest
0 голосов
/ 24 августа 2010

У меня есть такая вложенная форма:

<% 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 имеет идентификатор 0;

Когда я нажимаю «добавить дату» в первый раз, создается новый блок fields_for с id = 1;

Затем, каждый раз, когда я нажимаю «добавить дату», отображается новый блок fields_for, но идентификатор остается равным 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">

Спасибо за аванс за помощь!

1 Ответ

0 голосов
/ 24 августа 2010

Если вы посмотрите свой встроенный javascript в исходном коде страницы, вы увидите, что ваша link_to_function содержит статический html, который будет вставлен в контейнер place-and-date-inner. Это не изменится, поскольку он был собран на сервере и отправлен пользователю.

Чтобы исправить это, вам, вероятно, будет лучше подсчитать на стороне клиента количество контейнеров, которые ранее были вставлены в place-and-date-inner и соответственно увеличить в вашем шаблоне. Такого рода встроенные функции link_to_function мне всегда не нравились, если честно.

...