Rails - динамически строить глубоко вложенные объекты (Cocoon / nested_form)

В настоящее время у меня сложная форма с глубоким вложением, и я используюКокон драгоценный камень для динамического добавления разделов по мере необходимости (например, если пользователь хочет добавить другое транспортное средство в форму продажи). Код выглядит так:

<%= sale.fields_for :sale_vehicles do |sale_vehicles_builder| %>
    <%= render :partial => "sale_vehicles/form", :locals => {:f => sale_vehicles_builder, :form_actions_visible => false} %>    
<% end -%>
<div class="add-field-links">
    <%= link_to_add_association '<i></i> Add Vehicle'.html_safe, sale, :sale_vehicles, :partial => 'sale_vehicles/form', :render_options => {:locals => {:form_actions_visible => 'false', :show_features => true, :fieldset_label => 'Vehicle Details'}}, :class => 'btn' %>
</div>

Это очень хорошо работает для первого уровня вложенности -sale_vehicle объект правильно построен Cocoon, и форма отображается как ожидалось.

Проблема возникает, когда есть другой уровень вложенности -sale_vehicle частично выглядит так:

<%= f.fields_for :vehicle do |vehicle_builder| %>
    <%= render :partial => "vehicles/form", :locals => {:f => vehicle_builder, :f_parent => f, :form_actions_visible => false, :show_features => true, :fieldset_label => 'Vehicle Details'} %>
<% end -%>

Частичное дляvehicle отображается без полей, потому что нетsale_vehicle.vehicle Объект был построен.

Таким образом, мне нужно построить вложенный объект вместе с основным объектом (в настоящее время Cocoon не создает вложенные объекты), но как лучше это сделать? Есть ли способ выбрать вложенные формы из вспомогательного кода, чтобы их можно было построить?

В настоящее время Cocoon создает основной объект следующим образом:

if  instance.collection?
    f.object.send(association).build
else
    f.object.send("build_#{association}")
end

Если бы я мог сделать что-то вроде следующего, все было бы просто и красиво, но я не уверен, как это сделать.f.children Есть ли способ получить доступ к построителям вложенных форм из родительского конструктора форм?

f.children.each do |child|
    child.object.build
end

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

Спасибо!

РЕДАКТИРОВАТЬ: Вероятно, стоит упомянуть, что этот вопрос, по-видимому, имеет отношение как к драгоценному камню Кокон, упомянутых выше, а также Райан Бейтс & apos;nested_form драгоценный камень.Выпуск № 91 поскольку камень Кокон, похоже, та же проблема, что и этот, но обходной путь, предложенный dnagir (делегирование построения объектов), не идеален в этой ситуации, так как это вызовет проблемы в других формах.

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

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