rails group by和按列排序

时间:2017-05-25 11:54:44

标签: ruby-on-rails ruby activerecord

在我的控制器中,我按类别分组所有额外内容:

def index
  @categories = Extra.all.group_by(&:category)
end

结果类似于哈希数组:

{#<Category id:1, sort:2> => [#<Extra id:1>,#<Extra id:2],
 #<Category id:2, sort: 1> => [#<Extra id:3>,#<Extra id:4>]}

我想按类别排序&#34;排序&#34;列而不是id,这应该是这样的:

{#<Category id:2, sort:1> => [#<Extra id:3>,#<Extra id:4],
 #<Category id:1, sort: 2> => [#<Extra id:1>,#<Extra id:2>]}

当我尝试:

def index
  @categories = Extra.all.group_by(&:category).sort_by{|s| s[:sort]}
end

我得到&#34;没有将Symbol隐式转换为整数&#34;。是因为我在&#34; sort_by&#34;?

中使用了一个符号

2 个答案:

答案 0 :(得分:6)

试试这个,group_by会返回hash,你试图在[:sort]

数组上调用[#<Category id:2, sort:1>, [#<Extra id:3>,#<Extra id:4]]

您应该将它们带入两个变量|key, value|,密钥将为category

def index
  @categories = Extra.all.group_by(&:category).sort_by{|category, _extras| category.sort }
end

答案 1 :(得分:2)

使用order方法在数据库中进行排序:

@categories = Extra.order(sort: :asc).group_by(&:category)