我正在建立一个网站的年度存档,我让它工作,但我正在使用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,活动记录的实现会有所不同吗?
答案 0 :(得分: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 %>
答案 1 :(得分:0)
您需要使用函数来获取年份,这取决于您的数据库;例如,对于PostgreSQL,您可以使用EXTRACT
:
Post.group('extract(year from published_at)').count
# => { 2013 => 5, 2012 => 2, 2012 => 1 }