Как отправить несколько НОВЫХ предметов через массовое назначение в Rails 3.2

У меня довольно стандартный вариант использования. У меня есть родительский объект и список дочерних объектов. Я хочу иметь табличную форму, где я могу редактировать все дочерние элементы одновременно, как строки в таблице. Я также хочу иметь возможность вставить один или несколькоnew строки и при отправке должны быть созданы как новые записи.

Когда я используюfields_for для рендеринга ряда подформ для вложенных записей, связанных с has-many, rails генерирует имена полей, например,parent[children_attributes][0][fieldname], parent[children_attributes][1][fieldname] и так далее.

Это заставляет Rack анализировать хэш params, который выглядит следующим образом:

{ "parent" => { 
    "children" => {
      "0" => { ... },
      "1" => { ... } } }

Когда прошлоnew (непостоянный) объект, тот жеfields_for сгенерирует имя поля, которое выглядит так:

parent[children_attributes][][fieldname]

Обратите внимание[] без индекса в нем.

этоcannot размещаться в одной форме с полями, содержащими[0], [1]и т. д. потому что стойка запутывается и поднимает

TypeError: expected Array (got Rack::Utils::KeySpaceConstrainedParams)

«Хорошо», думает я. «Я просто убедился»all поля используют[] форма вместо[index] форма. Но я не могу понять, как убедитьfields_for делать это последовательно. Даже если я дам ему явный префикс имени поля и объекта:

fields_for 'parent[children_attributes][]', child do |f| ...

До тех пор, покаchild сохраняется, он автоматически изменяет имена полей, чтобы они стали, например,parent[children_attributes][0][fieldname]оставляя имена полей для новых записей какparent[children_attributes][][fieldname], Еще раз, Стойка Barfs.

Я в растерянности. Как, черт возьми, я использую стандартные помощники Rails, такие какfields_for представить несколькоnew записи, наряду с существующими записями, должны ли они анализироваться как массив в параметрах, и должны ли все записи, не имеющие идентификаторов, создаваться как новые записи в БД? Мне не повезло, и мне просто нужно сгенерировать все имена полей вручную?

Ответы на вопрос(8)

Ваш ответ на вопрос