使用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
答案 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),还是仅查找“今天”创建的锻炼?您的示例适用于前者,上面的示例执行后者。