У меня проблемы с вложенной формой. Я использую код Райана Бейтса. Фрагмент Gemfile:
gem "nested_form",: git => 'https://github.com/ryanb/nested_form.git'
Проблема в том, что когда я пытаюсь использовать * link_to_add *, я получаю новый элемент, который выглядит нормально, но он не работает, потому что он получает новый индекс 0 вместо «случайного» индекса, основанного на текущем времени что nested_form.js должен генерировать. Каждый элемент, который я добавляю, получает одинаковый индекс 0. Поэтому я не могу добавить новый элемент (или сохраняется только последний новый, в зависимости от исходного состояния модели).
Поведение аналогично с новым родительским объектом и при редактировании родительского объекта.
Я почти уверен, что делаю что-то не так, поскольку смог создать новое простое приложение, которое работает. Но я не могу понять, что не так с моим настоящим приложением.
nested_form.js, сгенерированные для моего (рабочего) тестового приложения и моего (не работающего) реального приложения, идентичны. Поэтому я не думаю, что есть проблема с разницей версий.
Я использовал Firebug для пошагового выполнения кода в nested_form.js, но не смог выяснить, почему он генерировал индекс 0 там.
Моя родительская модель имеет это:
курс курса
accepts_nested_attributes_for :levels, :allow_destroy => true
has_many :levels, :dependent => :destroy, :order => :depth
Моя форма создается следующим образом:
<%= nested_form_for(@course) do |f| %>
Часть с вложенным объектом выглядит так:
<%= f.fields_for :levels do |builder| %>
<tr>
<td><%= builder.text_field :name %></td>
<td><%= image_tag(builder.object.icon) unless (builder.object.icon.nil?) %></td>
<td><%= builder.link_to_remove "Remove" %></td>
</tr>
<% end %>
<tr><td><%= f.link_to_add "Add a level", :levels %></td></tr>
Я не вижу никакой разницы между моим кодом и моим рабочим примером (или другими примерами, которые я видел).
У кого-нибудь есть идеи?
UPDATE:
После попытки отладки этого в Firebug я понял, что «чертёж», используемый функцией addFields в nested_form.js, был изменен внутри метода addFields, и поэтому он не вставлял сгенерированный индекс (этот блок был будучи обойденным в моем тестовом приложении). Поэтому я изменил блок, где это происходит, изменив:
if (context) {
до:
if (false)
Это, кажется, исправляет мой симптом от предварительного тестирования, но я чувствую, что в некоторых контекстах (NPI) это могло сломать что-то еще (возможно, с несколькими уровнями вложенности?).