Ruby on rails 在Rails中获取今天和明天的db记录?

Ruby on rails 在Rails中获取今天和明天的db记录?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我期望的最终结果是,我希望将事件索引页面上的事件按3个时间段进行分组:今天、明天和本周。理想情况下,它应该按照访问者的时区进行排序,但是,如果这很重要的话,主要用例是EST 这只是一个相当简单的Rails应用程序,您可以在此处查看: 我对Rails相当陌生,因此我假设这类事情由控制器处理,并创建三个实例变量,而不是: @events = Event.all 应该是这样的: @todaysevents = Events.where(some logic in here) @tomorrowse

我期望的最终结果是,我希望将事件索引页面上的事件按3个时间段进行分组:今天、明天和本周。理想情况下,它应该按照访问者的时区进行排序,但是,如果这很重要的话,主要用例是EST

这只是一个相当简单的Rails应用程序,您可以在此处查看:

我对Rails相当陌生,因此我假设这类事情由控制器处理,并创建三个实例变量,而不是:

@events = Event.all
应该是这样的:

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

我只是想不出这个逻辑应该是什么。

我建议在模型中添加三个作用域,用您正在使用的任何时间字段替换
事件开始时间:

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
如果您遵循我非常喜欢的Sandi Metz的“每个操作一个实例变量”规则,您可能更喜欢将这些事件包装到对象中:

@events = {
  today: Event.today,
  tomorrow: Event.tomorrow,
  this_week: Event.this_week
}
然后在视图中使用它们,如
@events[:today]
@events[:明天],@events[:this_week]


你甚至可以在OpenStruct中包装散列,以允许
@events.today
@events.Tomday
@events.this_ _week
,但这可能是自行车脱落的领域。

因此我将此添加到我的控制器:
@events\u today=events.today
将此添加到我的模型中:
范围:today,lambda{where(事件开始日期:Time.zone.now.all_day)}<代码> >这是视图循环:<代码> <代码>,程序返回错误:<代码>未定义的方法,用于事件:模块因为我是白痴,应该读<代码>事件< /代码>,而不是<代码>事件。cope:today,lambda{time=time.zone.now{where(事件开始时间:time.all_day)}
。然后你可以说
范围:明天,lambda{today(1.day.from_now)}
.Re:Sandi Metz的每个动作一个实例-创建一个快速演示者的好方法,但这不就是把所有实例变量放在一个散列中吗?@Swards是的,但封装总是“只是”把相关的东西放在一个地方;)和YMMV,取决于在这个实例中你从中得到了多少价值。我认为提到这一点很有用,但太过切题,以至于没有完整的“将其放入演示者”的文字。
@events = {
  today: Event.today,
  tomorrow: Event.tomorrow,
  this_week: Event.this_week
}