按月/年红宝石显示帖子

时间:2013-08-02 07:04:07

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord

不知道从哪里开始,所以这里就是..我正在建立一个小博客,其中显示每个帖子的日期,加班每月会有很多博客文章,我想将它们组合在一起发表的那个月。

我想在视图中以这样的方式显示它

Archives

January 2013
February 2013
March 2013
etc

当我点击给定月份时,想法是它会将我带到那个月内发布的所有帖子。

到目前为止,我可以按月和年分组所有帖子

@posts_by_month = Post.all.group_by { |post| post.created_at.strftime("%B %Y") }

在我看来,我就这样渲染

<% @posts_by_month.each do |m| %>
  <%= m %>
<% end %>

在视图中返回此内容

["July 2013", [#<Post id: 1, title: "Ruby News", comments: "dsfdsfdsfdsfdsfds", category_id: 1, user_id: 1, created_at: "2013-07-26 07:10:25", updated_at: "2013-07-26 07:19:27", photo_file_name: "pf-7.jpg", photo_content_type: "image/jpeg", photo_file_size: 162495, photo_updated_at: "2013-07-26 07:19:26">]] 

所以目前我有一个哈希,其中月份/年份是关键,然后是数组中的所有帖子,这是正确的吗?

我想要显示的是月/年,然后点击那个月将被带到该月的所有帖子

任何帮助表示赞赏

修改

好吧,傻傻的,忘了关键/价值配对的基本知识,我只有显示的日期

<% @posts_by_month.each do |m,p| %>
  <%= link_to m %>
<% end %>

现在我只需要点击该链接即可查看该月的所有帖子

1 个答案:

答案 0 :(得分:1)

你可以做到

= link_to m, posts_path(:month => m)

现在在posts#index,根据params[:month]

获取帖子
if params[:month]
  date = Date.parse("1 #{params[:month]}")  # to get the first day of the month
  @posts = Post.where(:created_at => date..date.end_of_month)  # get posts for the month
else
  @posts = Post.all
end