Ruby on Rails - 将日期时间的哈希转换为日期

dia*_*ks2 4 ruby datetime ruby-on-rails date ruby-on-rails-3

我正在基于此Railscast教程创建日历视图.在本教程中,:published_on字段是日期字段.我的问题是,如果:published_on是日期时间字段而不是日期字段,我将如何调整下面的代码使其工作?

移民

t.date :published_on
Run Code Online (Sandbox Code Playgroud)

控制器:

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

视图:

<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>
Run Code Online (Sandbox Code Playgroud)

Tom*_*ing 9

我们只需按日期而不是日期时间对文章进行分组:

 @articles_by_date = Article.all.group_by {|i| i.created_at.to_date}
Run Code Online (Sandbox Code Playgroud)

删除@articles行,它看起来不像它做任何事情.

这应该是全部.

对于rails 3.x +方法使用ActiveRecord 函数,它将使用DB执行分组,而不是实例化所有记录然后分组.

@articles_by_date = Article.group("date(created_at)")
Run Code Online (Sandbox Code Playgroud)