开发者

Creating Blog Post Archive In Rails

开发者 https://www.devze.com 2023-03-17 06:19 出处:网络
I am trying to allow a user to click on a month and have the posts for that month be listed (sort of like doing a search, but without the search form).I want them to be able to just click the month na

I am trying to allow a user to click on a month and have the posts for that month be listed (sort of like doing a search, but without the search form). I want them to be able to just click the month name.

I can create an archive of the posts connected to certain months and have them displayed in the sidebar, but I want the posts for that month to replace the posts listed in the index action for the posts.

Here is the code I am using for the archive currently...

In the Posts Controller...

def index

@posts = Post.find(:all, :order => "created_at DESC")
@recent_posts = Post.all(:order => "created_at DESC")
@posts_by_month = Post.find(:all, :order => "created_at DESC").group_by { |post| post.created_at.strftime("%B %Y")}

respond_to do |format|
  format.html # index.html.erb
  format.xml  { render :xml => @posts }
end

end

Here is what is in the corresponding index view...

blog.archive

<% @posts_by_month.each do |monthname, posts| %>
<p class="month-archive"><%= monthname %></p>
     <div class="archive">
    <ul class="archive">
    <% posts.each do |post| %>
    <li class="archive"><p class="archive-post"><%= post.title %></p></li>
    <% end %>
    </ul>
</div>

This will list the posts based on the month they were created in, but this only gets me halfway there. I want the user to be able to click on the month and have it show the entire posts, and not just a listing in the sidebar.

Hope that makes some sense.

开发者_如何学GoAny help is appreciated. I've tried finding an example somewhere to look at so that I can wrap my head around how to do it and have not been able to.

Thanks!

Aaron...newby to Ruby


I think you would need to create a new method something called 'month' in Posts controller, and also create a routing something like

match 'posts/month/:month' => 'Posts#month', :as=> posts_by_month

in a new method in Posts controller, you would use argument params[:month] to select the adequate articles with :month=>params[:month]

edit

In a view page, you would create each month to link to posts/month/:month where :month would be any month related string that you have chosen.

Also, it seems that you are fetching same data twice.. It seems that @posts and @recent_posts are doing the same job. You may want to eliminate one of them to improve the performance.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号