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 |查看解析结果。我同意应该有更好的方法来做到这一点。我已经发布了一个替代方案,它只是将所需的类别组作为一个替代方案预先添加到哈希的前面。