我的头撞到了墙上——在ActiveRecord中使用了各种作用域,有些有效,有些无效,我不知道为什么。希望有人能给我一个提示/解决方案。所有范围说明都在同一个模型-投资组合项目中。所有调用都带有以下内容:
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) }
以下操作失败并给出错误消息:Time#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) }
作用域语句的构造是相同的——除了每个语句中使用的列名。
我很感激能洞察到我可能做错了什么。
Folks-这个问题在程序的堆栈中更深入-我在追踪一个ghost,因为Rails没有报告任何带有错误的跟踪信息,我认为它在scope语句中。正如任何仅供参考的一样,我的最终范围声明如下:
scope :in_discovery, lambda{|dtCheck| active_records.where('DATE(?) BETWEEN crnt_discovery_start AND crnt_discovery_finish', dtCheck)}
像冠军一样工作。
问题最终出现在一个子视图中,我再次对DB2数据库中的datatyep TIMESTAMP字段进行比较。由于这是一个无法更改数据类型的遗留应用程序,所以我在视图中所要做的就是在字段声明的末尾添加".to_date"。