Rails - динамически строить глубоко вложенные объекты (Cocoon / nested_form)
В настоящее время у меня сложная форма с глубоким вложением, и я используюКокон драгоценный камень для динамического добавления разделов по мере необходимости (например, если пользователь хочет добавить другое транспортное средство в форму продажи). Код выглядит так:
"sale_vehicles/form", :locals => {:f => sale_vehicles_builder, :form_actions_visible => false} %>
'sale_vehicles/form', :render_options => {:locals => {:form_actions_visible => 'false', :show_features => true, :fieldset_label => 'Vehicle Details'}}, :class => 'btn' %>
Это очень хорошо работает для первого уровня вложенности -sale_vehicle
объект правильно построен Cocoon, и форма отображается как ожидалось.
Проблема возникает, когда есть другой уровень вложенности -sale_vehicle
частично выглядит так:
"vehicles/form", :locals => {:f => vehicle_builder, :f_parent => f, :form_actions_visible => false, :show_features => true, :fieldset_label => 'Vehicle Details'} %>
Частичное для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
Любая помощь оценена, чтобы получить эту работу, или предложить другой способ динамического построения этих объектов.
Спасибо!
РЕДАКТИРОВАТЬ: Вероятно, стоит упомянуть, что этот вопрос, кажется, имеет отношение как к драгоценному камню Кокон, упомянутых выше, а также Райан Бейтс nested_form драгоценный камень.Выпуск № 91 поскольку камень Кокон, похоже, та же проблема, что и этот, но обходной путь, предложенный dnagir (делегирование построения объектов), не идеален в этой ситуации, так как это вызовет проблемы в других формах.