2012-08-15 202 views
4

我正在基於此創建日曆視圖Railscast tutorial。在本教程中,:published_on字段是日期字段。我的問題是,如果:published_on是日期時間字段而不是日期字段,我將如何調整下面的代碼以使其工作?Ruby on Rails - 將日期時間哈希轉換爲日期

遷移

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> 
+0

不只是'@date = params [:date]? DateTime.parse(params [:date]):DateTime.today'工作? – grilix 2012-08-15 12:58:19

+0

爲什麼不進行調整就無法正常工作? – 2012-08-15 12:59:14

+0

@grilix - 爲DateTime:Class'錯誤提供了一個'未定義的方法'。 @Christoph - 沒有調整就沒有錯誤,但它不會在日曆中顯示任何數據。但是,如果將其更改爲日期字段,則會正確顯示數據。 – diasks2 2012-08-15 13:10:19

回答

9

我們需要組文章Ø按日期排列不是datetime:

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

刪除@articles行,它看起來不像它做任何事情。

這應該是全部。

對於rails 3.x +方法,使用ActiveRecord group函數,它將使用DB執行分組,而不是實例化所有記錄,然後進行分組。

@articles_by_date = Article.group("date(created_at)") 
相關問題