使用 Rails 2.3.9 应用程序并想知道如何编写我的 named_scope 以便我只获得当前日期的 workouts
。我在应用程序 Controller 中使用 before_filter 设置时区。以下不会引发错误,只是不会过滤:
锻炼.rb
named_scope :today_only, :conditions => [ "workouts.created_at <= ? AND workouts.created_at >= ?", Time.zone.now, 1.days.ago ]
应用程序 Controller .rb
before_filter :set_user_time_zone
最佳答案
您没有看到想要的响应,因为 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 小时内创建的锻炼
(相对于 Time.now),还是仅查找“今天”创建的锻炼?您的示例适用于前者,上面的示例适用于后者。
关于ruby-on-rails - date.today Rails 2.3.9 的命名范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5752121/