嵌套表单渲染问题
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 %>
好的,这个应该很简单,这意味着我正处于拔毛的边缘!
我会尽量保持解释简单。
我有一个表格,要新建一个"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 %>