【发布时间】:2012-07-19 17:35:47
【问题描述】:
我有一个时间跟踪应用程序。
Hour 属于Project。 Project 属于 ProjectStatus,因此有一个字段 project_status_id。
现在我想限定我的 Hour 模型以过滤属于具有特定状态的项目的所有时间,例如2.
在我的项目模型中,我有这个范围:
#project.rb
scope :continous, where(:project_status_id => '2')
在我的 Hour 模型中,我尝试了以下范围,但它总是返回一个空数组,而且我知道有几个小时可以计算我的标准:
#hour.rb
scope :intern, joins(:project) & Project.continous
我也觉得控制台上生成的 SQL 输出看起来有点奇怪:
1.9.2-p180 :003 > Hour.intern
Hour Load (104.5ms) SELECT `hours`.* FROM `hours` INNER JOIN `projects` ON `projects`.`id` = `hours`.`project_id`
Project Load (6.1ms) SELECT `projects`.* FROM `projects` WHERE (project_status_id <> 2)
Hour Load (95.9ms) SELECT `hours`.* FROM `hours` INNER JOIN `projects` ON `projects`.`id` = `hours`.`project_id`
Project Load (1.0ms) SELECT `projects`.* FROM `projects` WHERE `projects`.`project_status_id` = 2
Hour Load (92.6ms) SELECT `hours`.* FROM `hours`
=> []
为什么有一个WHERE (project_status_id <> 2) 的查询和一个WHERE 'projects'.'project_status_id' = 2 的查询?
他是想把两者相减吗? 任何提示如何使这个范围工作..? 谢谢
【问题讨论】:
标签: mysql ruby-on-rails activerecord ruby-on-rails-3.1