我正在尝试按字母顺序创建一个术语词汇表,如下例所示:
-A-
Alpha
ATM
-B-
Beta
...
我没有问题按字母分组,但我想知道如何管理符号和数字以便通过#符号对它们进行分组
-#-
52 weeks low
@test
我想在我的Term表中添加一个列,我在其中指定第一个字母(在符号的情况下,我会在选择框中选择“#”)但我很高兴知道是否有更好的方法是在不添加其他字段的情况下实现此目的。
作为信息,这是我的控制器:
@terms = Term.all.group_by{|t| t.name[0]}
和我的观点:
<% @terms.keys.sort.each do |first_letter| %>
<%= first_letter %>
<% @terms[first_letter].each do |term| %>
<%= term.name %>
<% end %>
<% end %>
感谢您的帮助!
答案 0 :(得分:4)
你可以这样做,可能会影响性能,但可以完成工作:
@terms = Term.all.group_by{|t| t.name[0].capitalize.match(/[A-Z]/) ? t.name[0].capitalize : "#" }