我希望的最终结果是我希望将事件#index页面上的事件分为3个时间段:今天,明天和本周。理想情况下,它应按访问者的时区进行排序,但如果重要的话,主要用例是EST。
这只是一个相当简单的Rails应用程序,你可以在这里查看: https://github.com/moizk/events
我对Rails相当新,所以我假设这种事情由Controller处理,并创建三个实例变量而不是:
@events = Event.all
应该是这样的:
@todaysevents = Events.where(some logic in here)
@tomorrowsevents = Events.where(some logic in here)
我无法弄清楚应该是什么逻辑。
答案 0 :(得分: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
如果您遵循Sandi Metz的“每个操作一个实例变量”规则,我非常喜欢,您可能更喜欢将这些事件包装在一个对象中:
@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
,但这可能很适合自行车脱落领域。