我有一个有很多孩子的模型(选择)。我需要使用字段显示子项,但我真的想根据每个选择的属性使用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对选择进行分组。有什么建议吗?
答案 0 :(得分:2)
问题有点模糊。我的解释是,您希望按照表单中显示的属性对类似的选择进行分组。有点像这样:
group_by运算符不是您想要的。它会将满足条件的所有选择压缩为单个条目。
更好的选择是在填充选择列表时使用订单选项。甚至可能更好地为您指定关联中的顺序。这样做可以做到你想要的而不改变你的形式。
has_many :selections, :order => "attribute"
但这会导致所有匹配的选择查询按属性排序。如果这是一个问题,您可以为选择添加第二个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 %>
。
答案 1 :(得分:0)
我看到的唯一选择是通过关联对它们进行分组。在你的模型中:
has_many :selections, :order => 'attribute DESC'
这不是最干净的方法(这也是在整个应用程序的其余部分自动订购选项的方式),但它会起作用。