2012-05-01 5 views
0

주간 일정 캘린더보기가 있으며 각 날마다 발생하는 이벤트를 파악하는 최선의 방법을 찾지 못하고 있습니다.주간 일정 캘린더 범위

현재 events_controller의 색인 작업은 Event.rb의 클래스 메서드를 사용하여 해당 주에 발생한 모든 이벤트를 가져옵니다.

Sunday 04/29/2012 
     Class 10:00 am 
Monday 04/30/2012 
     Class 10:00 am 
Tuesday 05/01/2012 
     Class 10:00 am 
Wednesday 05/02/2012 
     Class 10:00 am 
Thursday 05/03/2012 
     Class 10:00 am 
Friday 05/04/2012 
     Class 10:00 am 
Saturday 05/05/2012 
     Class 10:00 am 

내가 가장 좋은 방법은 발생하는 이벤트의 내 ​​범위에서 각각 하루에 발생하는 이벤트를 얻을 무엇을 아주 확실하지 않다 : 그러나, 이런 일까지 이벤트를 표시하는 테이블을 만들려면 일주일 동안.

#event.rb 
class Event < ActiveRecord::Base 
    def self.for_week_starting(day=Date.today.beginning_of_week(:sunday)) 
    sunday = day.beginning_of_week(:sunday) 
    saturday = day.end_of_week(:sunday) 
    where(:date => sunday..satuday) 
    end 
end 

편집 : Enumerable에서 GROUP_BY 갈 방법이 될 것으로 보인다. 나는 매주 범위를 정하고이를 반복하고, @workouts.group_by(&:date)을 사용하여 각 운동 세트를 얻으 려합니다. 관심이있는 날짜와 일치하는 그룹에 그룹을 가져 오는 방법에 대해서는 명확하지 않습니다.

답변

0

결국 범위를 사용하지 못했지만 여기에는 완벽한 솔루션이 있습니다. 내장 된 메소드가 리턴 한 것을 알아내는 일은 콘솔 주위를 샅샅이 뒤지는 것이었지만, 그 후에 로직을 조립하는 것은 그렇게 어렵지 않았습니다.

#event.rb 
class Event < ActiveRecord::Base 
    def self.for_week_starting(day=Date.today.beginning_of_week(:sunday)) 
    sunday = day.beginning_of_week(:sunday) 
    saturday = day.end_of_week(:sunday) 
    where(:date => sunday..saturday) 
    end 
end 

    #events_controller.rb 
def index 
    #use today's date if none comes through params 
    start_date = params[:start_date] ? params[:start_date].to_date : Date.today 
    @week = (start_date.beginning_of_week(:sunday)..start_date.end_of_week(:sunday)) 
    @events = Event.for_week_starting(@week.first).group_by(&:date) 
end 

#index.html.erb 
<% @week.each do |day| %> 
    <%= day.strftime('%A, %B %e, %Y')%></th> 
    <% unless @events[day].nil? then %> 
    <% @events[day].each do |event| %> 
     <%= link_to event.name, event_path(event) %> 
    <% end %> 
    <% end %> 
<% end %> 
관련 문제