Rails:在视图中按月显示记录,还是其他任何方式?

时间:2011-05-05 23:57:34

标签: ruby-on-rails-3 activerecord sqlite enumeration

情景: 我有很多比赛。我想在我的视图中创建一个带有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!

寻求建议: 我认为这不是一个好的解决方案,因为在一段时间内这个页面会变慢。对?到2013年,我可以拥有1500条记录而且连续查找(:所有)匹配以获得这些月份似乎是浪费。我可以使用另一种解决方案吗?我应该在跟踪月份的“匹配”之外保留一个单独的表格。也许我正在考虑这个,目前的解决方案还可以。想法?

1 个答案:

答案 0 :(得分: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(...)进行条件查找。