我正在为一个网站构建年度存档,并且它可以正常工作,但我正在使用 group_by。这个特定的网站最终将有数千个帖子,我想将分组移动到数据库,但我不太确定如何将其转换为事件记录查询。
我正在使用 Active Record 和 Rails 4,这是我目前所拥有的:
在 Controller 中:
@posts_by_year = @posts.group_by { |post| post.published_at.year }
在 View 中:
<% @posts_by_year.each do |year, post| %>
<li><%= "#{year} - #{pluralize post.count, 'post'}" %></li>
<% end %>
生成一个如下所示的列表:
2013 (5 posts)
2012 (2 posts)
2010 (1 post)
我如何复制这个确切的功能,但让数据库进行分组,如果您预计每年有 2,000-3,000 个帖子,您认为值得进行切换吗?最后,如果我使用 mysql 或 postgres,事件记录的实现会有所不同吗?
最佳答案
在 Controller 中(从标签中假设您正在使用 mysql)
@posts_by_year = @posts.select("YEAR(published_at) AS year, COUNT(id) AS counter").group("YEAR(published_at)")
在 View 中
<% @posts_by_year.each do |post| %>
<li><%= "#{post.year} - #{pluralize post.counter, 'post'}" %></li>
<% end %>
关于mysql - 如何转换此 group_by 语句,使其在 DB 而不是 Ruby 上工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18945287/