在我的控制器中,我按类别分组所有额外内容:
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;?
中使用了一个符号答案 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)