在单个time_ago_in_words下对博客帖子进行分组

时间:2012-04-22 15:35:23

标签: ruby-on-rails ruby view

我正在使用

time_ago_in_words(post.created_at)

列出我的博客条目时。

我想在帖子标题中列出time_ago_in_words而不是每个列表,我希望在一个标题下有不同帖子的组,例如我可能在“30分钟前”下有一个帖子,在“一个月前”下有8个帖子

有人可以推荐最好的方法吗?

1 个答案:

答案 0 :(得分:2)

您是否意识到time_ago_in_words是一种用Ruby语言编写的方法,因此您不能在sql-queries中使用它来执行DB的分组和计算?

如果你有很多帖子,那么你必须制作一些sql-query来分组你的帖子。

但是如果你告诉你的帖子数量不是那么大,你可以使用简单的方法:

# in a controller
@posts_map = Post.order('created_at DESC').all.group_by{|post| time_ago_in_words post.created_at }

# in a view
- @posts_map.each do |time, posts|
  %h2 Created #{time} ago (#{posts.length}):
  - posts.each do |post|
    %h3= link_to post.title, post