2012-04-22 96 views
0

列舉我的博客文章時,我使用下單time_ago_in_words分組博客文章

time_ago_in_words(post.created_at) 

而不是每個列表中的time_ago_in_words在該帖子標題中列出,我想在一個標題下的不同職位的組,例如我可能有一個帖子「30分鐘前」和8個帖子「一個月前」 「

任何人都可以推薦最好的方法嗎?

回答

2

您是否意識到time_ago_in_words是一種用Ruby語言編寫的方法,因此您不能在您的sql-queries中使用它來執行數據庫的分組和計算?

如果你有很多帖子,你必須製作一些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 
+0

感謝您的答覆JDOE,但我想你已經錯過,明白我的意思。我有一個博客首頁,列出我所有的帖子,以及他們使用time_ago_in_words發佈的時間。我想避免這種情況,我可能會連續發佈3個帖子,標題都是「1個月前發佈」。我想要的是在「1個月前」有一個標題,下面有三個帖子。 – pingu 2012-04-22 19:38:28

+1

這就是我的例子! '創建#{time}前(#{posts.length}):'顯示標題和'posts.each do | post |'循環通過這個時間組。然後對另一個時間組也是如此。 – jdoe 2012-04-22 19:43:59

+0

我們可以考慮一個SQL選項還是沒有真正的方法?我現在正在研究這個確切的事情。 – 2017-07-31 12:26:55