2

連絡先にはそれぞれfirst_nameとlast_nameがあります。連絡先のインデックスに、ASCの順序でlast_nameによってdefault_scopedされたリストを表示します。これは問題なく動作しますが、私はそれをより良くすることを目指しています。

連絡先を姓の最初の文字でグループ化する整理されたリストをインデックスに作成したいのですが、これを行う方法に固執しています。結果は次のようになります。

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

経験が浅いため、これまでのところ2つのオプションしか表示されません。

1)アルファベットの文字ごとに変数を作成し、それぞれに適切な連絡先を追加できます。これにより、DBへの呼び出しが大量に発生し(私が想定している)、コントローラー内の豊富な変数はまったくエレガントに見えません。

2)モデルからすべての連絡先を単一の変数にプルし(現在実行していること)、コントローラーで、配列を反復処理してそれに応じて新しい変数を割り当てるプライベートメソッドを作成できます。これはまだ非効率に思えますが、私にはその#1の方がよく見えます。

これを行うためのより良い方法について洞察を与えていただけますか?Ruby1.9.3とRails3.2.8を使用しています。

4

1 に答える 1

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 %>
于 2012-11-20T21:12:37.710 に答える