嵌套表单呈现问题

时间:2016-01-20 17:14:57

标签: ruby-on-rails cocoon-gem

好的,这个应该很简单,这意味着我即将拔毛!

我会尽量保持解释简单。

我有一张表格,可以创建一个新的"案例。"这些案件有个别的部分。"

我试图找到一个复选框列表,以便您可以检查您需要的部分,单击“添加”,然后显示所包含部分的标题。

反而发生的是,我通过复选框选择部件,单击添加,然后将项目的全部列表(包括复选框)添加到页面中。我只想要显示所选的部分标题。

以下是我的表格:

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

我不知道我需要发布哪些其他代码,所以请告诉我你是否还需要其他任何代码。

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

由于

1 个答案:

答案 0 :(得分:1)

看起来你过度工程了。

首先,如果您只想添加现有的部分(IE用户无法创建任何新部件),您就可以填充part_ids属性{ {1}}对象:

@case

这只允许你分配&#34;现有<%= 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 %> 到您的parts;如果你想创建新的部分,你必须使用你已经做过的@case模式。

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

  

与form_for一样,它产生一个与块的特定模型对象相关联的FormBuilder对象,并且在块内允许在构建器上调用方法以生成与模型对象关联的字段

你需要这样的东西:

parts