Ruby on rails 是否设置组的第一组?

Ruby on rails 是否设置组的第一组?,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-3.2,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 3.2,早上好,我想知道,我是否可以像这样和小组一起选择呢 @p = Performance.includes(place: [:category]). order("places.title ASC"). group_by{|p| p.place.category} 那么,如果我想让某个特定类别成为第一类,我该怎么办 EDIT 1 在@p.each do | p |查看对结果的解析时,group_by的返回值只是一个普通散列,因此您可以在其上应用sort_by将所需类别放在第一位: g

早上好,我想知道,我是否可以像这样和小组一起选择呢

  @p = Performance.includes(place: [:category]).
  order("places.title ASC").
  group_by{|p| p.place.category}
那么,如果我想让某个特定类别成为第一类,我该怎么办

EDIT 1

在@p.each do | p |

查看对结果的解析时,
group_by
的返回值只是一个普通散列,因此您可以在其上应用
sort_by
将所需类别放在第一位:

group_by { |p| p.place.category }.sort_by { |k,v| (k=="category name") ? "" : k }
其中,
category name
是要优先排序的类别的名称(空字符串使其在排序结果中位于第一位,其他所有内容将按字母顺序排序)

这将把散列转换成数组。如果要以哈希形式保存数据,请将结果包装在
哈希[…]

Hash[group_by { |p| p.place.category }.sort_by { |k,v| (k=="category name") ? "" : k }]
另请参阅这篇关于哈希排序的文章:

更新

与排序相比,处理器密集度稍低的替代方案:

grouped = group_by { |p| p.place.category }
Hash[*grouped.assoc("category name")].merge(grouped.except("category name"))

也许有一种更简单的方法可以做到这一点,但基本上,这会在散列的开头预先添加“category name”的键和值。

虽然我认为shioyama的答案可能会对您有所帮助,但我怀疑您是否真的需要排序过程。正如shio正确指出的那样,sort_by的返回值是散列。那么,为什么不直接访问您想要作为第一个值的值,只需将其用作散列键?

也许这将有助于您通过@p.each do | p |查看解析结果。我同意应该有更好的方法来做到这一点。我已经发布了一个替代方案,它只是将所需的类别组作为一个替代方案预先添加到哈希的前面。