Ruby on rails 对作用域使用Timecop gem
我在Rails 3.0应用程序中指定了一个作用域,如下所示:Ruby on rails 对作用域使用Timecop gem,ruby-on-rails,ruby,date,rspec,Ruby On Rails,Ruby,Date,Rspec,我在Rails 3.0应用程序中指定了一个作用域,如下所示: class DrawingList < ActiveRecord::Base scope :active_drawings, where('start_date <= ? AND end_date >= ?', Date.today, Date.today) end 正如你所想象的,看跌期权确实显示了那个日期。今天是两天后。但是,范围是在不同的上下文中评估的,因此它使用旧的“今天”。在Timecop可能影响的环
class DrawingList < ActiveRecord::Base
scope :active_drawings, where('start_date <= ? AND end_date >= ?', Date.today, Date.today)
end
正如你所想象的,看跌期权确实显示了那个日期。今天是两天后。但是,范围是在不同的上下文中评估的,因此它使用旧的“今天”。在Timecop可能影响的环境中,如何评估一个人的今天
谢谢 这是一个非常常见的错误。正如您在中所写,作用域使用的日期是加载代码时的日期。如果你在生产环境中运行这个程序,只在你重新启动应用程序时才会重新加载代码(不像开发环境中每次请求都会重新加载代码),那么在你重新启动应用程序的那天,你会得到正确的结果,但第二天,结果会在一天内出来,第二天会出来2天等等 定义这样的范围的正确方法是
scope :active_drawings, lambda { where('start_date <= ? AND end_date >= ?', Date.today, Date.today)}
scope:active_图形,lambda{where('start_date=?',date.today,date.today)}
lambda确保每次使用范围时都对这些日期进行评估。这是一个非常棘手的问题!谢谢我很高兴我现在意识到了这种行为。
scope :active_drawings, lambda { where('start_date <= ? AND end_date >= ?', Date.today, Date.today)}