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 (делегирование построения объектов), не идеален в этой ситуации, так как это вызовет проблемы в других формах.