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)获得一组每次锻炼,我只是不太清楚如何在与我感兴趣的日期相匹配的情况下让该组脱离组。

4

1 回答 1

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 %>
于 2012-05-02T11:36:23.367 回答