2015-03-25 49 views
0

我剛接觸rails,剛完成Michael Hartl的教程。如何在rails博客上按日期歸檔?

我正在創建一個小博客作爲我的第一個應用程序,我正在尋找對所有主頁博客文章進行排序並將其分組。

例如:今天今天所有的帖子...低於前天和昨天的帖子,等

我看到有一個方法調用,GROUP_BY但無法弄清楚如何實現它

燦有人幫忙? 看到很多人都在尋找這樣的解決方案。

感謝, 亞當

+0

你打算列出每個組中的項目嗎?或只顯示計數? – 2015-03-25 07:12:47

回答

1

一個示例代碼,您可以使用group_by

posts = posts.group_by{|post| 
     case post.created_at 
      when 0.days.ago..1.day.ago 
      "Today" 
      when 1.day.ago..2.days.ago 
      "Yesterday" 
      when 1.week.ago..2.weeks.ago 
      "Last week" 
      when 2.weeks.ago..3.weeks.ago 
      "2 weeks ago" 
      when 1.month.ago..2.months.ago 
      "Last month" 
      else 
      "Older" 
      end 
} 

編輯

上面的代碼將返回哈希,鑑於

@posts = {"Older"=>[#<Contact id: 1, name: "sontya", email: "[email protected]", comments: "hi there", created_at: "2015-03-20 
16:46:52", updated_at: "2015-03-20 16:46:52">, #<Contact id: 2, name: "faruk", email: "[email protected]", comments: "hi there", created_at: 
"2015-03-23 18:17:05", updated_at: "2015-03-23 18:17:05">], "Yesterday" => [#<Contact id: 1, name: "sontya", email:  
"[email protected]", comments: "hi there", created_at: "2015-03-20 16:46:52", updated_at: "2015-03-20 16:46:52">, #<Contact id: 2, name: 
"faruk", email: "[email protected]", comments: "hi there", created_at: "2015-03-23 18:17:05", updated_at: "2015-03-23 18:17:05">]} 

類似於此與您的數據,然後在視圖 ,遍歷Hash

<% @posts.each do |k,v| %> 
    <tr> 
     <td><%=k%></td> 
    </tr> 
    <% v.each do |post| %> 
     <tr> 
     <td><%=post.name%></td> 
     </tr> 
    <% end %> 
<% end %> 
+0

謝謝,這是我正在做的,但被困在如何在帖子索引視圖中呈現它? – Adam 2015-03-25 07:18:11

+0

然後,發佈您的代碼。你面臨什麼問題 – Sontya 2015-03-25 07:19:08

+0

一旦我發佈你在控制器上提到的內容,我不知道該如何放置視圖,不知道如何開始放置它,所以沒有代碼顯示。 – Adam 2015-03-25 07:45:04

0

我想使用數據庫級別組是不正確的,因爲它通常與sum或count或類似的東西一起使用,如果你不使用任何適用於組的函數,那麼你最終只會得到一個帖子爲一組,這是你的情況下,一個崗位的每一天,我想你應該在視圖

posts = Post.some_home_page_query.order(:created_at) 
@grouped_posts = posts.chunk{ |x| x.created_at.to_date } 

# you can replace the block passed to chunk with whatever you 
# see fit for your own case 

選擇所有,並將它們組合成陣列和循環在視圖中,你可以做這樣的事情

- @grouped_posts.each |date, posts| 
    = "Posts for #{date.some_formatting}" 
    - posts.each do |post| 
    = render post # or whatever you want