2012-11-20 5 views
2

연락처에는 각각 first_name과 last_name이 있습니다. 연락처 색인 내에서 last_scoped 목록을 ASC 순서로 last_name으로 표시합니다. 이 작업은 정상적으로 수행되지만 더 나아질 것으로 기대됩니다.알파벳 순서로 표시하기 위해 성으로 연락처 구성

색인에서 그룹을 구성하는 성 (last) 이름의 첫 글자로 정리 목록을 만들고 싶습니다.이 작업을 수행하는 방법에 대해 자세히 설명합니다. 난 단지 두 가지 옵션을 볼

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

때문에 내 경험 부족으로 지금까지 : 결과는 같을 것이다 I는 알파벳의 각 문자에 대한 변수를 만들 수

1), 각각에 적합한 연락처를 추가 . 이것은 DB (나는 추측하고있다)에 대한 호출 톤을 생성하고, 내 컨트롤러의 변수가 풍부하지 않은 것처럼 보인다.

2) 내 모델의 모든 연락처를 단일 변수 (지금 내가하고있는 것)로 가져올 수 있으며, 내 컨트롤러에서 배열을 반복하여 그에 따라 새 변수를 할당하는 개인 메서드를 만듭니다. 이것은 여전히 ​​비효율적 인 것처럼 보이지만 # 1.

더 나은 방법에 대한 통찰력을 줄 수 있습니까? 나는 Ruby 1.9.3과 Rails 3.2.8을 사용하고있다.

당신이에 사용자를 뽑아하면

답변

3

는 다음과 같이 해시를 반복 할 수 있습니다보기에서

# creates a hash mapping first letter of last name to array of corresponding users 
groups = users.group_by { |user| user.last_name[0].downcase } 

와 함께, 당신은 그룹 수를 users 말 :

<% 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 %> 
+0

완벽! 그게 정확히 내가하고 싶은 일을합니다. 방향에 진심으로 감사드립니다. – Steve

관련 문제