我有一个控制器方法,如下所示:
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 %>
您可能会发现一些问题,因为上述代码未经测试。