我剛接觸rails,剛完成Michael Hartl的教程。如何在rails博客上按日期歸檔?
我正在創建一個小博客作爲我的第一個應用程序,我正在尋找對所有主頁博客文章進行排序並將其分組。
例如:今天今天所有的帖子...低於前天和昨天的帖子,等
我看到有一個方法調用,GROUP_BY但無法弄清楚如何實現它
燦有人幫忙? 看到很多人都在尋找這樣的解決方案。
感謝, 亞當
我剛接觸rails,剛完成Michael Hartl的教程。如何在rails博客上按日期歸檔?
我正在創建一個小博客作爲我的第一個應用程序,我正在尋找對所有主頁博客文章進行排序並將其分組。
例如:今天今天所有的帖子...低於前天和昨天的帖子,等
我看到有一個方法調用,GROUP_BY但無法弄清楚如何實現它
燦有人幫忙? 看到很多人都在尋找這樣的解決方案。
感謝, 亞當
是的,看到了寶石,但它不會解釋如何在帖子索引視圖中渲染? – Adam 2015-03-25 07:18:37
一個示例代碼,您可以使用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 %>
我想使用數據庫級別組是不正確的,因爲它通常與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
你打算列出每個組中的項目嗎?或只顯示計數? – 2015-03-25 07:12:47