每个联系人都有first_name和last_name。在我的联系人索引中,我按ASC顺序显示了last_namecoped by last_name。这很好用,但我希望能做得更好。
我想在索引中创建一个有组织的列表,按照姓氏的第一个字母对联系人进行分组,我有点不知道如何完成这项工作。结果如下:
<div class="contacts" id="contact_list_a">
<h2>A</h2>
<div class="contact">John Abercrombie</div>
<div class="contact">Julie Aloters</div>
</div>
<div class="contacts" id="contact_list_b">
<h2>B</h2>
<div class="contact">Harry Bronson</div>
<div class="contact">Stevie Brussels</div>
</div>
...(continues)
由于我缺乏经验,到目前为止我只看到两个选项:
1)我可以为字母表中的每个字母创建一个变量,并在适当的位置添加联系人。这会给DB带来大量的调用(我在假设),而且控制器中丰富的变量看起来并不优雅。
2)我可以将模型中的所有联系人拉到一个变量中(我现在正在做的),然后在我的控制器中创建一个私有方法,它迭代数组并相应地分配新变量。这似乎仍然效率低下,但对我来说看起来更好#1。
您能否深入了解更好的方法?我正在使用Ruby 1.9.3和Rails 3.2.8。
答案 0 :(得分:3)
一旦您将用户拉入,users
,您可以将其与
# creates a hash mapping first letter of last name to array of corresponding users
groups = users.group_by { |user| user.last_name[0].downcase }
在您的视图中,您可以按如下方式遍历哈希:
<% groups.each do |letter, contacts| %>
<div class="contacts" id="contact_list_<%= letter %>">
<h2>letter.upcase</h2>
<% contacts.each do |contact| %>
<div class="contact"><%= contact.full_name %></div>
<% end %>
</div>
<% end %>