Редактировать: мне удалось заставить его работать. Если вы переходите на «блог / 2010», вы видите все сообщения, сделанные в 2010 году, а если вы переходите на «блог / 2010 / апрель», вы видите все сообщения, сделанные в апреле 2010 года и т. Д.
def archive
year = params[:year]
month = params[:month]
day = params[:day]
if (year && month && day)
requested_date = Date.new(year.to_i, Date.parse(month).month.to_i, day.to_i)
from = requested_date - 1
to = requested_date + 1
@posts_by_month = Blog.find(:all, :conditions => ["due BETWEEN ? AND ?", from, to])
elsif (year && month)
requested_month = Date.new(year.to_i, Date.parse(month).month.to_i)
end_month = requested_month.end_of_month
@posts_by_month = Blog.find(:all, :conditions => ["due BETWEEN ? AND ?", requested_month, end_month])
else
requested_year = Date.new(year.to_i)
@posts_by_month = Blog.find(:all, :conditions => ["created_at BETWEEN ? AND ?", requested_year, requested_year.end_of_year ])
end
end
#routes.rb
map.connect 'blog/:year/:month/:day',
:controller => 'blogs',
:action => 'archive',
:year => /\d{4}/,
:month => /\w{3}/,
:day => /\d{2}/,
:day => nil,
:month => nil
Я не знаю, является ли это «хорошим» кодом, но я уверен, что кто-то может сделать его еще лучше. Я был бы признателен, если бы кто-то сделал.