Я пытаюсь создать архивную страницу для своего блога.В нем должны быть перечислены все названия блогов, упорядоченные в хронологическом порядке в обратном порядке, сгруппированные по месяцам.
Я использую DataMapper, у которого нет функции DATE_FORMAT, как MySQL, что означает, что я не могу просто сгруппировать в запросе.Поэтому я не вижу другого способа, кроме как выполнить всю тяжелую работу в простом Ruby.
Вот что у меня сейчас есть:
# GOOD: order of posts within the months are correct
# BAD: order of months is random
@posts = Post.published(:order => :published_at.desc)
@months = {}
@posts.each do |post|
month_year = post.published_at.strftime("%B %Y")
@months[month_year] = [] unless @months.has_key? month_year
@months[month_year] << post
end
Просмотр:
.archive
- @months.each do |month, posts|
%h2= month
%ol
- posts.each do |post|
= partial(post)
Это делает то, что я хочу, за исключением того, что порядок месяцев испорчен, потому что они содержатся в хэше.(Я использую Ruby 1.8, поэтому порядок хэшей действительно случайный).
Как сделать правильный порядок месяцев?Возможно, мне нужно вместо этого использовать массив, но я не могу понять, как будет выглядеть остальная часть кода.