我有一个功能:
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}]
}
我一直在尝试按顺序对 TrackCategories 进行排序,并在其中按 promo_order 对 Tracks 进行排序。
这一直给我错误,我很确定我做错了什么
tracks.group_by { |t| t[:track].track_category }.sort_by { |t| t[:order] }.sort_by { |t| t[:promo_order] }
您正在传递一个来自group_by
并被强制作为数组sort_by
的键值对,然后尝试访问数组中的键,该键当然不存在。
换句话说,您误解了 sort_by 中使用的输入。第一个sort_by
,|t|
是由 group_by 生成的散列密钥对,并被强制转换为形式为 的数组[k,v]
。在你的情况下,t
是:
[ #<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]
和第二行类似的东西,但使用[:promo_order]
代替。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句