轨道上的红宝石 - 深度嵌套表单未正确构建



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

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通过Publications有许多Components(反之亦然),一个Publication最多可以有一个Edit。有什么想法吗?谢谢。

你的整个方法在我看来是错误的。的字段只有一个实例,因为一个出版物最多只能有一个编辑。我认为你应该这样定义它。

<%= 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 %>

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

相关内容

  • 没有找到相关文章

最新更新