gpt4 book ai didi

ruby-on-rails - 通过 foreach 中 View 中的第一个字母进行 ruby​​ 组集合

转载 作者:太空宇宙 更新时间:2023-11-03 16:01:37 25 4
gpt4 key购买 nike

例如,我收集了这样的数据:

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...

我没想到如何选择第一个字母并在 View 中按它分组...也许有人有想法?

最佳答案

.group_by 是你的 friend :

@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 block 中添加一些内容:

@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 对我的回答的评论

关于ruby-on-rails - 通过 foreach 中 View 中的第一个字母进行 ruby​​ 组集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23792947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com