每周活动日程的范围

时间:2012-05-01 20:28:34

标签: ruby-on-rails activerecord scope

所以我每周都会看到一个事件日历,我正试图找出最好的方法来获取每一天发生的事件。

目前,我对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

编辑: 可见的group_by似乎是要走的路。我可以查看每周范围并重复一遍,然后使用@workouts.group_by(&:date)来获得每个训练的一组,我只是不太清楚我是如何让小组离开小组的那个匹配我的日期我很感兴趣。

1 个答案:

答案 0 :(得分: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 %>