从Ruby on Rails中的现有嵌套对象/模式创建嵌套对象/模态

时间:2013-01-27 23:13:39

标签: ruby-on-rails ruby-on-rails-3 nested-forms nested-attributes cocoon-gem

我在项目中使用了深层嵌套模型(使用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

工作流程如下:

  

新申请 - &gt;新提交者 - &gt;新孩子

所有都可以使用一种形式创建。

此外,我还想实现以下过程:

  

新申请 - &gt; 现有提交者 - &gt;新孩子

应通过下拉列表框选择现有对象。

以下是视图的(简化的,可工作的)代码:

new.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 %>

这里开始我的问题:要构建用于向所选提交者添加新子项的表单,我需要将此对象分配给表单构建器。我不知道该怎么做。

有人可以给我一个如何实现这一点的提示吗?或者这种情况根本不可能?

提前致谢!

基督教

1 个答案:

答案 0 :(得分:0)

simple_fields_for接受对象的第二个参数:https://github.com/plataformatec/simple_form/blob/master/lib/simple_form/action_view_extensions/form_helper.rb#L33如果您通过现有的提交者它可能会起作用。