Вот пример приближения к этому, хотя в этом я хотел отсортировать его по дням. Это для вашего действия контроллера:
def index
@article_days = Article.all.group_by{ |r| r.published_at }
end
Чтобы изменить это значение на месяцы, вы должны сделать что-то вроде r.published_at.beginning_of_month
в приведенном выше примере и, по сути, group_by
название месяца.
В шаблоне просмотра:
<% @article_days.sort.each do |pub, articles| %>
<h3><%= pub.strftime('%e %A, %B %Y') %></h3>
<% for article in articles %>
<%= article.title %><br/>
<%= article.summary %>
<% end %>
<% end %>
На этом также есть скринкаст.
UPDATE
ОК - значит, вам нужны только названия месяцев. Сохраните переменную экземпляра, которую мы настроили, в вашем действии index вместе с другим вашим кодом (вы, вероятно, настроили @articles = Article.all
). Затем, где вы хотите ссылки, перечисленные ниже:
<% @article_months.sort.each do |pub, articles| %>
<h3><%= pub.strftime('%B') %></h3>
<% for article in articles %>
<%= link_to "#{article.title}", article_path(article) %>
<% end %>
<% end %>