从今天和明天获取Rails中的db记录?

时间:2013-03-29 19:25:37

标签: ruby-on-rails ruby

我希望的最终结果是我希望将事件#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)

我无法弄清楚应该是什么逻辑。

1 个答案:

答案 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,但这可能很适合自行车脱落领域。