4

このRailscast チュートリアルに基づいてカレンダー ビューを作成しています。チュートリアルでは、:published_on フィールドは日付フィールドです。私の質問は、:published_on が日付フィールドではなく日時フィールドである場合、以下のコードをどのように調整して機能させるのでしょうか?

移行

t.date :published_on

コントローラ:

def index
  @articles = Article.all
  @articles_by_date = @articles.group_by(&:published_on)
  @date = params[:date] ? Date.parse(params[:date]) : Date.today
end

意見:

<div id="articles">
  <h2 id="month">
    <%= link_to "<", date: @date.prev_month %>
    <%= @date.strftime("%B %Y") %>
    <%= link_to ">", date: @date.next_month %>
  </h2>
  <%= calendar @date do |date| %>
    <%= date.day %>
    <% if @articles_by_date[date] %>
       <ul>
        <% @articles_by_date[date].each do |article| %>
          <li><%= link_to article.name, article %></li>
         <% end %>
      </ul>
    <% end %>
  <% end %>
</div>
4

1 に答える 1

9

日時ではなく日付でのみ記事をグループ化する必要があります。

 @articles_by_date = Article.all.group_by {|i| i.created_at.to_date}

@articles行を削除します。何も実行されていないようです。

それがすべてであるはずです。

Rails 3.x +アプローチでActiveRecordグループ関数を使用する場合、すべてのレコードをインスタンス化してからグループ化するのではなく、DBを使用してグループ化を実行します。

@articles_by_date = Article.group("date(created_at)")
于 2012-08-15T17:12:29.333 に答える