Rails3使用ActiveRecord;使用Time#succ失败的范围已过时

时间:2012-08-23 21:56:38

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord scope

我正在撞墙 - 我正在使用ActiveRecord中的各种范围做一些工作而有些则没有,我无法弄明白为什么。很想有人给我一个提示/解决方案。所有范围语句都在同一个Model - PortfolioProject中。所有人都被称为以下内容:

PortfolioProject.<scope name>(Time.zone.now).order('sequence')

这个有效 - 每次都不会失败:

scope :in_discovery, lambda {|curTime| where('sequence > 0 AND ? BETWEEN crnt_discovery_start AND crnt_discovery_finish', curTime) }

以下失败并提供错误消息:时间#succ已过时;使用时间+ 1

scope :in_requirements, lambda {|curTime|  where('sequence > 0 AND ? BETWEEN crnt_requirements_start AND crnt_requirements_finish', curTime) }
scope :in_tech_design, lambda {|curTime|  where('sequence > 0 AND ? BETWEEN crnt_tech_dsgn_start AND crnt_tech_dsgn_finish', curTime) }
scope :in_development, lambda {|curTime|  where('sequence > 0 AND ? BETWEEN crnt_development_start AND crnt_development_finish', curTime) }
scope :in_testing, lambda {|curTime|  where('sequence > 0 AND ? BETWEEN crnt_testing_start AND crnt_testing_finish', curTime) }
scope :in_launch, lambda {|curTime|  where('sequence > 0 AND ? BETWEEN crnt_launch_start AND crnt_launch_finish', curTime) }

范围语句的构造是相同的 - 除了每个语句中使用的列名。

我很欣赏我可能做错的任何见解。

1 个答案:

答案 0 :(得分:0)

伙计 - 问题是程序中的堆栈 - 我正在追逐一个鬼,因为Rails没有报告错误的任何跟踪信息,我认为它在范围声明中。正如任何FYI - 我的最终范围声明如下:

scope :in_discovery, lambda{|dtCheck| active_records.where('DATE(?) BETWEEN crnt_discovery_start AND crnt_discovery_finish', dtCheck)}

像冠军一样工作。

问题最终出现在子视图中,我再次对DB2数据库中的datatyep TIMESTAMP字段进行了比较。由于它是一个我无法更改数据类型的遗留应用程序,因此我在视图中所要做的就是在字段声明的末尾添加“.to_date”。