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

标签 ruby-on-rails ruby ruby-on-rails-4 haml

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

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/

相关文章:

ruby - 如何在事件记录中正确添加外键?

ruby-on-rails - Ruby On Rails 4 - 路由问题

ruby-on-rails - 删除记录时的HTTP代码

ruby-on-rails - Rails中如何判断日志设备的类型

ruby-on-rails - Rails -- 从 Rails 控制台发送所有未接受的邀请

ruby-on-rails - 设计使用用户名而不是电子邮件进行身份验证

ruby - 如何匹配所有语言的字符,除了 ruby​​ 中的特殊字符

python - 按包含数字的行排序,忽略附加在字母上的数字

mysql - 如果没有模型文件,该表如何更新?

sql - 获取错误 "function week(timestamp without time zone) does not exist"