我在我的项目中使用深度嵌套模型(使用simple_form和cocoon)。只要所有嵌套对象都是新的,一切正常。
我的问题是,我想从现有(嵌套)对象创建一个嵌套对象。
这是我的模型
class Application < ActiveRecord::Base
belongs_to :submitter
has_one :composition
accepts_nested_attributes_for :submitter, :composition
end
class Submitter < ActiveRecord::Base
has_one :spouse
has_many :children
has_many :receipts
has_many :applications
accepts_nested_attributes_for :spouse, :children, :receipts, :applications
end
class Child < ActiveRecord::Base
belongs_to :submitter
has_many :receipts
end
工作过程如下所示:
新应用程序 --> 新提交者 --> 新子项
所有这些都可以使用一个表单创建。
此外,我还想实现以下过程:
新应用程序 -->现有提交者 -->新子项
应通过下拉列表框选择现有对象。
下面是视图的(简化的、有效的)代码:
新.html.erb
<%= simple_form_for(@application) do |f| %>
<%= f.simple_fields_for :submitter do |submitter| %>
<%= render "submitter_fields", :f => submitter %>
<% end %>
<% end %>
_submitter_fields.html.erb
<%= f.input :firstname %>
<%= f.input :lastname %>
<%= render "child", :f => f %>
_child.html.erb
<div id="childs">
<%= f.simple_fields_for :children do |child| %>
<%= render "child_fields", :f => child %>
<% end %>
<div class="links">
<%= link_to_add_association 'Add child', f, :children %>
</div>
</div>
_child_fields.html.erb
<div class="nested-fields">
<%= f.input :firstname %>
<%= f.input :lastname %>
<%= link_to_remove_association "Remove child", f %>
</div>
现在,我想添加一个下拉列表,其中填充了所有现有的提交者。例如:
<%= f.assosciation :submitter %>
我的问题从这里开始:要构建用于向所选提交者添加新子项的表单,我需要将此对象分配给表单构建器。我不知道该怎么做。
有人可以给我一个提示如何实现这一点吗?还是这种情况根本不可能?
提前感谢!
基督教
simple_fields_for对对象进行第二个参数:https://github.com/plataformatec/simple_form/blob/master/lib/simple_form/action_view_extensions/form_helper.rb#L33,如果您通过现有的提交者,它可能会起作用。