group posts by month,archive display

if i click on month i want to display only that months blog posts,this is an existing code which is working fine for few months not for all,where am i doing wrong ,should i change the code.can any one help me out.and also i want the month and date to display in reverse ,recent on top.like

    ARCHIVES     January 2015     December 2014     November 2014     October 2014     September 2014     August 2014     June 2014     May 2014     .     .

app/blogcontroller.rb

    class BlogController < ApplicationController

    require 'date'     if (params[:population_categories])       @blog_posts = BlogPost.live.where(:population_category_ids =>params[:population_categories]).latest.page(params[:page])      elsif (params[:month])       b_dt = DateTime.strptime("01/" + params[:month].to_s + "/" + params[:year] + " 00:00", "%d/%m/%Y %H:%M")       e_dt = DateTime.strptime("01/" + (params[:month].to_i+1).to_s + "/" + params[:year] + " 00:00", "%d/%m/%Y %H:%M")       else @blog_posts=BlogPost.live.keyword(params[:keyword]).latest.page(params[:page])     end

app/views/blog/index.html.erb

    <div class="right-col">     <h2>ARCHIVES</h2>     <div class='posts_by_month'>

      <ul>       <% archive_string = "" %>       <% date_value = "" %>       <% @posts_by_month.each do |monthname, posts| %>

        <% date_value = (Date::MONTHNAMES[monthname[0..-6].to_i]) + " " + (monthname[3..8]) %>         <% archive_string = "<li><a class='filter' href='/blog?month=" + monthname[0..-6] + "&year=" + monthname[3..8] + "'>" + date_value + "</a></li>" + archive_string %>       <% end %>       <%= raw archive_string %>       </ul>

    </div>   </div>

I have responded to this in the earlier thread where you asked it the first time.

Colin

Colin Law wrote in post #1168627:

I have responded to this in the earlier thread where you asked it the first time.

Colin

i am working on the existing code,i am new to ruby on rails ,i am not understanding this code and how is it working.why is 0..-6 given in month and 3...8 in year.

<% date_value = (Date::MONTHNAMES[monthname[0..-6].to_i]) + " " + (monthname[3..8]) %>         <% archive_string = "<li><a class='filter' href='/blog?month=" + monthname[0..-6] + "&year=" + monthname[3..8] + "'>" + date_value + "</a></li>" + archive_string %>       <% end %>       <%= raw archive_string %>

Colin Law wrote in post #1168627:

I have responded to this in the earlier thread where you asked it the first time.

Colin

i am working on the existing code,i am new to ruby on rails ,i am not understanding this code and how is it working.why is 0..-6 given in month and 3...8 in year.

In that case I suggest you take a few days out to work right through a tutorial on rails, such as railstutorial.org, which is free to use online. That will give you a basic understanding of rails, and you will recover the time spent very rapidly.

To answer the question you first need to know what is in monthname, I suggest first you need to know what is in monthname. If you include something like <%= "monthname = #{monthname}" %> that will display whatever is in monthname. Next look at the docs for the String (I assume that monthname contains a string) to see what String[0..-6] and [3..8] do and to check if you <%= "[monthname[0..-6]" "(monthname[3..8]" %> for the cases that work and those that don't it will hopefully give you some idea. The docs for Range will tell you what [0..-6] do. Your code does look a little odd but I don't know what is in monthname, and the fact that it sometimes works means there must be some useful code there.

Colin

okay thank you,i will try my best