开发者

Retrieve a record's created_by field to a passed in month and year in Rails3?

Im trying to make a side bar for my blog archive that lists out all the months for my blog entries, so when you click on a link such as "June 2007" all the blogs from June 07 are loaded. Heres my link_to

<%= link_to month.first.strftime("%B %Y"), blog_archive_month_path(month.first.strftime("%Y-%m-%d")) %>

month.first is a record I pulled up. Should my controller look something like this?:

@blog_posts = BlogPost.where(:created_at.strftime("%Y-%开发者_Go百科m-%d") => params[:date]).(:select => "title, id, slug, created_at", :order => "created_at DESC")

I was hoping I could convert the records' created_by field to a format I could pass in an match but I get an undefined method erro


How about this?

Bring the link down to just year-month:

<%= link_to month.first.strftime("%B %Y"), blog_archive_month_path(:date => month.first.strftime("%Y-%m")) %>

Then, use the range syntax to get a SQL BETWEEN:

@blog_posts = BlogPost.
              where(:created_at => (params[:date].to_date..(params[:date].to_date + 1.month))).
              order("created_at desc")


Basically I agree with what Dan Croak is saying (+1). The only mistake in his answer is that .to_date throws an error if there is not a complete date string in params[:date] (like in his example). So my suggestion would be:

View:

<%= link_to month.first.strftime("%B %Y"), blog_archive_month_path(month.first.strftime("%Y-%m-%d")) %>

Controller:

@blog_posts = BlogPost.
  where(:created_at => params[:date].to_date.beginning_of_month..params[:date].to_date.end_of_month).
  order("created_at desc")

The problem with your original code is that you are trying to call strftime on :created_at, which is not possible.

Or if you don't like a full date in your URL, you could do this:

<%= link_to month.first.strftime("%B %Y"), blog_archive_month_path(month.first.strftime("%Y-%m")) %>

And:

@blog_posts = BlogPost.
  where(:created_at => "#{params[:date]}-01".to_date.beginning_of_month.."#{params[:date]}-01".to_date.end_of_month).
  order("created_at desc")
0

上一篇:

下一篇:

精彩评论

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

最新问答

问答排行榜