我是rails的新手,刚刚完成了Michael Hartl的教程。
我正在创建一个小博客作为我的第一个应用程序,我希望对所有主页博客文章进行排序并将它们分组。
例子:TODAY和今天的所有帖子......在昨天和昨天的帖子之下等等。
我看到有一个名为group_by的方法,但无法弄清楚如何实现它
有人可以帮忙吗? 看到很多人都在网上寻找这样的解决方案。
谢谢, 亚当
答案 0 :(得分:1)
答案 1 :(得分: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: "montya@mailinator.com", 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: "faruk@dispostable.com", 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:
"montya@mailinator.com", 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: "faruk@dispostable.com", 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 %>
答案 2 :(得分:0)
我认为使用数据库级别组是不正确的,因为它通常与sum或count或类似的东西一起使用,如果你不使用任何适用于组的函数,你最终只会使用一个发布每个组,在你的情况下每天发一个帖子,我认为你应该只选择all并将它们分组到数组中并在视图中循环
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