2011-05-05 2 views
0

시나리오 : 나는 많은 성냥이 있습니다. 내보기에 HTML 링크가있는 사이드 컬럼을 작성하여 매월 일치 항목을 볼 수 있습니다.레일 : 다른 방법으로보기에서 개월 단위로 레코드를 표시 하시겠습니까?

현재 솔루션 : 여기 내 현재의 구현입니다

#Controller 
@matches_by_month = Match.find(:all).group_by {|match| match.kickoff.strftime('%B %Y')} 

#View 
<% @matches_by_month.each do | month, matches | %> 
<%=link_to month %><br> 
<% end %> 

# Returns in the side column links that look like this. 
# April 2011 
# May 2011 
# Which is great! 

SEEKING 조언 : 나는이 때문에이 페이지의 속도가 느려지고 일정 기간 동안 좋은 해결책이 아니라고 생각 해요 . 권리? 2013 년까지 1500 개의 레코드를 가질 수 있으며 달을 얻으려면 지속적으로 (: 전체) 일치를 찾는 것이 낭비처럼 보입니다. 내가 사용할 수있는 또 다른 해결책이 있습니까? 나는 그 달을 추적하는 '성냥'외에 별도의 테이블을 유지해야할까요? 어쩌면 나는 이것을 과장하고 있으며 현재의 해결책은 괜찮습니다. 생각?

답변

1

이 일치에게 첫 번째 레코드와 당신이 할 수있는 마지막 레코드 사이에 매달이 있다고 가정하는 것이 안전 경우

# for your sidebar 
start_date = Match.first.kickoff.to_date 
end_date = Match.last.kickoff.to_date 

<% start_date.step(end_date, 1.month) do |date| %> 
    <%= link_to date.strftime('%%B %Y'), matches_by_month_path(date) %> 
<% end %> 

그리고 컨트롤러는 선택한 날짜를 구문 분석하고 사용 조건 발견 할에 Match.where(...).

+0

'단계 방법으로 인해 오류가 발생합니다. 나는 당신의 해결책을 밖으로 trie 그리고 나는 뒤에 오는 과실을 얻는다. "정의되지 않은 메소드'step 'for 2011-04-02 12:45:00 UTC : Time" – alenm

+0

'Time'에는'step' 메소드가 없습니다. 날짜로 변환하십시오. 나는 그것을 반영하기 위해 답을 업데이트했다. – coreyward

+0

그걸 고쳤고, 매월 성냥이있는 한이 해결책은 훌륭합니다. 하지만 매월 (예 : 오프 시즌) 매치가 없으면 첫 번째 해결책은 내가 사용해야 할 것이라고 말하는 것이 안전합니까? – alenm

관련 문제