深层嵌套表单无法正确构建

时间:2014-04-08 05:21:54

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

我有一个控制器方法,如下所示:

def new_edits
  @document = Document.find(params[:id])
  @document.publications.each { |p| p.build_edit(body: p.component.body, name: p.component.name, publication_id: p.id) }
end

这种结构的匹配形式:

<%= form_for(@document.publications, url: url_for(create_edits_document_path)) do |f| %>
  <%= f.fields_for :edit do |ef| %>
    <%= ef.text_field(:name) %>
    <%= ef.text_area(:body, class: 'editable_area') %>
    <%= ef.hidden_field(:publication_id) %>
  <% end %>
<% end %>

我只能在应该有三个时构建fields_for的一个实例。 Document有多个ComponentsPublications(反之亦然),Publication最多可以有一个Edit。有什么想法吗?感谢。

1 个答案:

答案 0 :(得分:1)

你的整个方法对我来说都是错的。 Fields for只有一个实例,因为一个发布只能有一个编辑。我认为你应该这样定义它。

<%= form_for(@document, url: url_for(create_edits_document_path)) do |f| %>
  <%= f.fields_for :publications do |pub| %>
    <%= pub.fields_for :edit, pub.object.edit do |ef| %>
      <%= ef.text_field(:name) %>
      <%= ef.text_area(:body, class: 'editable_area') %>
      <%= ef.hidden_field(:publication_id) %>
    <% end %>
  <% end %>
<% end %>

您可能会发现一些问题,因为上述代码未经过测试。