我有一个有很多 child (选择)的模型。我需要使用 fields for 显示子项,但我真的想使用 group_by 根据每个选择的属性对它们进行分组。
我目前正在使用
accepts_nested_attributes_for :selections, :allow_destroy => true
所以我的表单看起来有点像这样:
<% form_for @match do |form| %>
<% form.fields_for :selections do |child_form| %>
<%= child_form.object.first_name %>
<%= child_form.check_box '_delete' %>
<%= child_form.label '_delete', 'Remove' %>
<% end %>
<%= form.submit %>
<% end %>
不太确定如何使用 group_by 对 :selections 进行分组。有什么建议吗?
这个问题有点含糊。我的解释是您希望按属性将相似的选择分组,因为它们出现在表单中。有点像这样:
- 比赛表格
- 选择表
- 具有属性 A 的选择字段
- 具有属性 A 的选择字段
- 具有属性 A 的选择字段
- 具有属性 B 的选择字段
- 具有属性 B 的选择字段
- 具有属性 C 的选择字段
- 等等
group_by 运算符不是您想要的。它将所有符合条件的选择压缩为一个条目。
更好的选择是在为选择填充列表时使用顺序选项。在关联中指定该顺序甚至可能会更好。这将在不更改表单的情况下执行您想要的操作。
has_many :selections, :order => "attribute"
但是这会导致您所有来自 match 的选择查询都按属性排序。如果这是一个问题,您可以为选择添加第二个 has_many 关系。
has_many :selections
has_many :grouped_selections, :class_name => "selection", :order => "attribute"
accepts_nested_attributes_for :selections, :grouped_selections :allow_destroy => true
表单中需要更改的是 <% form.fields_for :grouped_selections %>
.
我是一名优秀的程序员,十分优秀!