named_scope for date.today Rails 2.3.9

时间:2011-04-22 03:53:02

标签: ruby-on-rails ruby date named-scope

使用Rails 2.3.9应用程序并想知道如何编写我的named_scope,以便我只从当前日期获得workouts。我正在使用before_filter在应用程序控制器中设置时区。下面不会抛出错误,只是不会过滤:

workout.rb

named_scope :today_only, :conditions => [ "workouts.created_at <= ? AND workouts.created_at >= ?", Time.zone.now, 1.days.ago ]

application_controller.rb

before_filter :set_user_time_zone

1 个答案:

答案 0 :(得分:3)

您没有看到您想要的响应,因为Ruby在评估您的类定义时评估您对Time.now的调用,而不是在您调用范围时。您需要将lambda传递给named_scope电话,以便在每次请求时对其进行评估:

# ensure that Time.now is evaluated on every call
named_scope :today_only, lambda {{ :conditions => ["workouts.created_at BETWEEN ? AND ?", Time.zone.now.at_beginning_of_day, Time.zone.now.end_of_day ] }}

另外,我认为您的时间边界可能不正确。您是在寻找过去24小时内创建的workouts(相对于Time.now),还是仅查找“今天”创建的锻炼?您的示例适用于前者,上面的示例执行后者。