2012-08-15 3 views
4

Railscast tutorial을 기반으로 달력보기를 만들고 있습니다. 이 자습서에서 : published_on 필드는 날짜 필드입니다. 내 질문은 : published_on 날짜 필드 대신 날짜/시간 필드가 있다면 어떻게 작동하도록 아래 코드를 조정할 것이라고?Ruby on Rails - Datetime의 날짜 해시 변환

마이그레이션

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' work? – grilix

+0

왜 조정없이 작동하지 않습니까? –

+0

@grilix - 오늘 'DateTime : Class' 오류에 대해'정의되지 않은 메소드 '를 제공합니다. @Christoph - 조정없이 오류가 없지만 일정에 데이터가 표시되지 않습니다. 그러나 날짜 필드로 변경하면 데이터가 올바르게 표시됩니다. – diasks2

답변

9

우리는 제품 그룹에 필요 오 날짜별로 nly :

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

@articles 줄을 삭제하면 아무 것도 보이지 않습니다.

그게 전부입니다.

레일즈 3.x + 접근법이 ActiveRecord group 함수를 사용하는 경우 모든 레코드를 인스턴스화하고 그룹화하지 않고 DB를 사용하여 그룹화를 수행합니다.

@articles_by_date = Article.group("date(created_at)")