0

我正在为一个网站建立一个年度档案,我让它工作,但我正在使用 group_by。这个特定站点最终将有数千个帖子,我想将分组移动到数据库中,但我不确定如何将其转换为活动记录查询。

我正在使用活动记录和 rails 4,这是我目前所拥有的:

在控制器中:

@posts_by_year = @posts.group_by { |post| post.published_at.year }

在视图中:

  <% @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,活动记录的实现会有所不同吗?

4

2 回答 2

1

在控制器中(假设您正在使用 mysql 的标签)

@posts_by_year = @posts.select("YEAR(published_at) AS year, COUNT(id) AS counter").group("YEAR(published_at)")

在视图中

<% @posts_by_year.each do |post| %>
  <li><%= "#{post.year} - #{pluralize post.counter, 'post'}" %></li>
<% end %>
于 2013-09-22T15:26:11.253 回答
0

您需要使用函数来获取年份,这取决于您的数据库;例如,对于 PostgreSQL,您可以使用EXTRACT

Post.group('extract(year from published_at)').count
# => { 2013 => 5, 2012 => 2, 2012 => 1 } 
于 2013-09-22T15:25:11.890 回答