2011-05-05 50 views
0

情景: 我有一堆火柴。我想在我的視圖中創建一個帶HTML鏈接的側欄,您可以按月查看匹配。這是我目前的執行:Rails:以任何其他方式在視圖中顯示月份的記錄?

目前的解決方案

#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! 

徵求意見: 我想,這是不是一個很好的解決方案,因爲在一段時間內該頁面將放緩。對?到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

出於某種原因'步驟方法正在產生一個錯誤。我解決你的解決方案,我得到以下錯誤。 「未定義的方法」步驟「爲2011-04-02 12:45:00 UTC:時間」 – alenm 2011-05-06 00:19:13

+0

'時間'沒有'步驟'方法。只需將它們轉換爲日期。我更新了答案以反映這一點。 – coreyward 2011-05-06 00:20:33

+0

修復了這個問題,只要每個月都有匹配,這個解決方案就非常棒。但是如果我每個月都沒有比賽(即休賽期),可以肯定地說我的第一個解決方案就是我需要使用的嗎? – alenm 2011-05-06 00:28:01

相關問題