Ruby on rails 在嵌套哈希中使用GROUPBY和sort by
我有一个功能:Ruby on rails 在嵌套哈希中使用GROUPBY和sort by,ruby-on-rails,ruby,sorting,hash,group-by,Ruby On Rails,Ruby,Sorting,Hash,Group By,我有一个功能: tracks.group_by { |t| t[:track].track_category } 这将创建一个哈希: { #<TrackCategory id: 2, order: 0> => [{:track => #<Track promo_order: 2>, :order => 2}, {:track => #<Track promo_order: 2>,
tracks.group_by { |t| t[:track].track_category }
这将创建一个哈希:
{
#<TrackCategory id: 2, order: 0> =>
[{:track =>
#<Track promo_order: 2>,
:order => 2},
{:track =>
#<Track promo_order: 2>,
:order => 1}],
#<TrackCategory id: 1, order: 1> =>
[{:track =>
#<Track promo_order: 2>,
:order => 2},
{:track =>
#<Track promo_order: 2>,
:order => 1}]
}
您正在传递一个键值对,该键值对来自
group\u by
,并作为数组强制传递给sort\u by
,然后尝试访问数组中的一个键,该键当然不存在
换句话说,您误解了sort_by中使用的输入。在第一个排序依据
中,|t |
是group|U by生成的哈希密钥对,并强制为[k,v]
格式的数组。在您的情况下,t
是:
[ #<TrackCategory id: 2, order: 0>,
[{:track =>
#<Track promo_order: 2>,
:order => 2},
{:track =>
#<Track promo_order: 2>,
:order => 1}],
#...
]
第二行类似,但使用了
[:promo\u order]
。它会给您带来什么错误?这些物品是如何摆放的?(即他们与其他事物的关系是什么?)
[ #<TrackCategory id: 2, order: 0>,
[{:track =>
#<Track promo_order: 2>,
:order => 2},
{:track =>
#<Track promo_order: 2>,
:order => 1}],
#...
]
tracks.group_by { |t| t[:track].track_category }
.sort_by { |t, _| t[:order] } # here you're sorting by TrackCategory#[:order]