如何在rails中使用group_by和fields_for?

时间:2009-11-23 15:14:58

标签: ruby-on-rails ruby

我有一个有很多孩子的模型(选择)。我需要使用字段显示子项,但我真的想根据每个选择的属性使用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对选择进行分组。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

问题有点模糊。我的解释是,您希望按照表单中显示的属性对类似的选择进行分组。有点像这样:

  • 匹配表格
    • 选择表单
      • 具有属性A的选择字段
      • 具有属性A的选择字段
      • 具有属性A的选择字段
      • 具有属性B的选择字段
      • 具有属性B的选择字段
      • 具有属性C的选择的字段

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'

这不是最干净的方法(这也是在整个应用程序的其余部分自动订购选项的方式),但它会起作用。