我有一个控制器方法,如下所示:
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
有多个Components
到Publications
(反之亦然),Publication
最多可以有一个Edit
。有什么想法吗?感谢。
答案 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 %>
您可能会发现一些问题,因为上述代码未经过测试。