Rails - лучший способ / как создать навигацию на основе даты - PullRequest
1 голос
/ 12 сентября 2011

Я новичок в рельсах и работаю над расширением функциональности моего основного блогового приложения.Я хотел бы создать навигационные ссылки на основе дат.Например, я хотел бы иметь список ссылок с названиями месяцев (в виде ссылок), и когда вы нажимаете на месяц, он показывает вам все статьи, опубликованные в этом месяце.

I'mборется с тем, как лучше всего достичь этого.

Должен ли я создать новую модель / представление / контроллер для чего-то вроде ArticleArchive?Или решение более простое, основанное на моих потребностях?

Я искал другие сообщения в сообществе, и никто, похоже, не ответил на это.Любая помощь с тем, как структурировать это и, возможно, реализовать, приветствуется.Спасибо!

1 Ответ

3 голосов
/ 13 сентября 2011

Вот пример приближения к этому, хотя в этом я хотел отсортировать его по дням. Это для вашего действия контроллера:

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 %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...