【问题标题】:named_scope for date.today Rails 2.3.9date.today Rails 2.3.9 的 named_scope
【发布时间】:2011-04-22 03:53:01
【问题描述】:

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

锻炼.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

【问题讨论】:

  • 您是否尝试传递您的命名范围变量?
  • 尝试在您的 named_scope 中使用 lambda 块。可能是缓存的问题。

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


【解决方案1】:

您没有看到您想要的响应,因为 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)创建的workouts,还是仅在“今天”创建的锻炼?您的示例适用于前者,上面的示例适用于后者。

【讨论】:

  • 这一切都说得通,我想要的是后者。但是...当我将其放入时出现此错误:undefined method 'at_start_of_day' for Fri Apr 22 08:52:58 UTC 2011:Time
  • 确认!不好意思,方法其实是`at_beginning_of_day'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-25
  • 1970-01-01
  • 1970-01-01
  • 2011-01-04
相关资源
最近更新 更多