嵌套表单渲染问题

Nested form rendering problems

好的,这个应该很简单,这意味着我正处于拔毛的边缘!

我会尽量保持解释简单。

我有一个表格,要新建一个"case."这些案例有个别"parts."

我想要一个复选框列表,这样您就可以勾选您需要的部分,单击“添加”,然后显示所包含部分的标题。

实际情况是,我 select 通过复选框添加部分,单击“添加”,然后将整个项目列表(包括复选框)添加到页面中。我只想显示 selected 部分标题。

这是我的表格:

_form.html.erb

<%= simple_form_for @case, html: { multipart: true } do |f| %>
  <%= f.input :image, as: :file %>
  <%= f.input :title, label: "Case" %>
  <%= f.input :description, label: "Parts" %>

  <%= f.simple_fields_for :parts do |part| %>
    <%= render 'part_fields', f: part %>
    <%= link_to_add_association 'Add Part', f, :parts, class: "btn btn-default add-button" %>
  <% end %>

  <%= f.button :submit %>
<% end %>

_parts_fields.html.erb

<%= f.label "Parts list" %><br />
<%= f.collection_check_boxes :title, Part.all, :id, :title do |b| %>
  <div class="collection-check-box">
    <%= b.check_box %>
    <%= b.label %>
  </div>
<% end %>

我不知道我还需要什么其他代码post,所以如果您还需要什么,请告诉我。

此外,我想增加数量,但不确定从哪里开始。如果有人可以提供帮助,或者只是指出正确的方向,将不胜感激!

谢谢

看起来你是 over-engineering。

首先,如果您只想添加 现有 部件(即用户无法创建任何新部件),您将能够填充 part_ids 属性@case 对象的:

<%= simple_form_for @case, html: { multipart: true } do |f| %>
  <%= f.input :image, as: :file %>
  <%= f.input :title, label: "Case" %>
  <%= f.input :description, label: "Parts" %>

  <%= f.collection_check_boxes :part_ids, Part.all, :id, :name %>
  <%= f.submit %>

<% end %>

这将只允许您将 "assign" 现有的 parts 添加到您的 @case;如果您想创建新零件,则必须使用您已经在使用的 f.fields_for 模式。

为了给你一些上下文,Cocoon 添加 所有 部分的原因是因为 fields_for 的一种方式通过父模型添加 条额外记录。因此,您在此过程中包含 all parts 的模式本质上是错误的:

Like form_for, it yields a FormBuilder object associated with a particular model object to a block, and within the block allows methods to be called on the builder to generate fields associated with the model object


你需要这样的东西:

<%= simple_form_for @case, html: { multipart: true } do |f| %>
  <%= f.input :image, as: :file %>
  <%= f.input :title, label: "Case" %>
  <%= f.input :description, label: "Parts" %>

  <%= f.collection_check_boxes :part_ids, Part.all, :id, :name %>
  <%= link_to_add_association 'Create Part', f, :parts, class: "btn btn-default add-button" %>

  <%= f.submit %>
<% end %>

#_parts_fields.html.erb
<%= f.text_field :title %>