好的,这个应该很简单,这意味着我即将拔毛!
我会尽量保持解释简单。
我有一张表格,可以创建一个新的"案例。"这些案件有个别的部分。"
我试图找到一个复选框列表,以便您可以检查您需要的部分,单击“添加”,然后显示所包含部分的标题。
反而发生的是,我通过复选框选择部件,单击添加,然后将项目的全部列表(包括复选框)添加到页面中。我只想要显示所选的部分标题。
以下是我的表格:
_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 %>
我不知道我需要发布哪些其他代码,所以请告诉我你是否还需要其他任何代码。
另外,我想添加数量,但我不确定从哪里开始。如果有人可以提供帮助,或者只是指出我正确的方向,那将非常感激!
由于
答案 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