2013-03-29 53 views
0

我期望的最终结果是,我希望将事件#索引页上的事件按3个时间段分组:今天,明天和本周。理想情况下,它应该根据访问者的时区进行排序,但如果重要的话,主要用例是EST。从Rails的今天和明天获取db记录?

这只是一个非常简单的Rails应用程序,你可以在这里看看: https://github.com/moizk/events

我是相当新的Rails的,所以我想这样的事情是由控制器进行处理,并创建三个实例变量而不是:

@events = Event.all 

它应该是这样的:

@todaysevents = Events.where(some logic in here) 
@tomorrowsevents = Events.where(some logic in here) 

我只是想不通这是什么逻辑笑是的。

回答

1

我会建议增加三个范围的模型,与任何时间字段使用的是更换event_start_at

class Event < ActiveRecord::Base 
    scope :today, lambda { where(event_start_at: Time.zone.now.all_day } 
    scope :tomorrow, lambda { where(event_start_at: 1.day.from_now.all_day } 
    scope :this_week, lambda { where(event_start_at: Time.zone.now.all_week } 
end 

并在控制器使用它们:

@events_today = Event.today 
@events_tomorrow = Event.tomorrow 
@events_this_week = Event.this_week 

如果按照桑迪梅斯的“一个实例变量每个动作”的规则,我很喜欢,你可能更喜欢把这些事件包装在一个对象中:

@events = { 
    today: Event.today, 
    tomorrow: Event.tomorrow, 
    this_week: Event.this_week 
} 

然后在@events[:today]@events[:tomorrow], @events[:this_week]这样的视图中使用它们。

你甚至可以将哈希包装在OpenStruct中,以允许@events.today,@events.tomorrow,@events.this_week,但是这可能很好地进入了自行车脱落领域。

+0

所以我将此添加到我的控制器: '@events_today = Events.today' 这给我的模型: '范围:今天,拉姆达{其中(event_start_date:Time.zone.now.all_day)}' 这就是视图循环: '<%@ events_today.each do | event | %>' 并且该应用程序返回错误: '今天未定义的方法事件:模块' –

+0

因为我是个白痴,应该读取'Event',而不是'Events'。定影。 –

+0

太棒了。有效。 :) –

相关问题