例如,我收集了此类数据:
80 (0)
90 (0)
100 (0)
200 (0)
A2 (0)
A3 (0)
A4 (0)
A5 (0)
A6 (0)
A8 (0)
Allroad (0)
Cabriolet (0)
Coupe (0)
Q7 (0)
Quattro (0)
R8 (0)
RS4 (0)
RS6 (0)
S2 (0)
S3 (0)
S4 (0)
S5 (0)
S6 (0)
S8 (0)
TT (0)
V8 (D11) (0)
和这样的看法:
.vip-offers#manufacturers-list
.man-area
%ul
- @models.each do |car|
%li
= link_to "#{car.name} (#{car.get_cars_model_count(car.id)})", advanced_search_show_path(by_model: car.id), id: "link-blue", data: { no_turbolink: true }
如您所见-我将整个数据显示为列表,但我需要按名称中的第一个字母将其分组,例如:
8
80 (0)
9
90 (0)
1
100 (0)
2
200 (0)
A
A2 (0)
A3 (0)
A4 (0)
A5 (0)
A6 (0)
A8 (0)
Allroad (0)
etc...
我没有想到如何选择第一个字母并按它分组...也许有人有想法?
.group_by
是你的朋友:
@grouped_cars = cars.group_by { |one_record| one_record.name[0].to_s # returns the first letter of the name }
此代码应创建一个结构如下的哈希:
{
'0' => [<Car id:12, name: '007'>],
'A' => [<Car id:13, name: 'Audi'>, <Car id:14, name: 'Audi RS5'>],
# etc.
}
然后,您可以执行以下操作:
%ul
- @grouped_cars.each do |first_letter, cars|
%li.first_letter= first_letter
%ul
- cars.each do |car|
%li.one_car= car.name
您可能需要在代码group_by
块中添加一些内容:
@grouped_cars = cars.group_by do |car|
car.name[0].to_s.upcase # transforms 'a' into 'A'
end
我还注意到,您可能会失去字母顺序,因为哈希没有排序。要解决此问题,您可以执行以下操作:
%ul
- @grouped_cars.keys.sort.each do |letter|
%li.first_letter= first_letter
%ul
- @grouped_cars[letter].each do |car|
%li.one_car= car.name
或检查@DaniëlKnippers对我的回答发表评论
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句