我在执行计算,为计算值应用条件并在一个查询中计算结果。问题是我不知道如何从条件中引用计算的字段。ruby计算字段的活动记录条件
我有Issues.created_on字段,我想查找有关在用户提供的几周内每周创建多少个问题的统计信息。 我的查询这看起来像在MySQL的:
mysql> SELECT status_id as group_id,
YEAR(created_on)*1000+WEEK(created_on,1) as range_value, count(*) as
noOfEntries FROM `issues` WHERE (`issues`.`project_id` IN (1)) GROUP
BY issues.status_id, range_value;
+----------+-------------+-------------+
| group_id | range_value | noOfEntries |
+----------+-------------+-------------+
| 1 | 2012031 | 2 |
| 5 | 2012015 | 1 |
+----------+-------------+-------------+
这里是我的代码(简化):
# Range value is dynamic: "YYYYXXX", where YYYY is year and XXX could be week, month or day of year
range_value = "YEAR(created_on)*1000+WEEK(created_on,1)"
select = "#{range_value} as range_value, count(*) as noOfEntries"
grouping = "range_value"
# other conditions are provided by user, so we just add one here
conditions["range_value"] = range[:min]..range[:max]
rows = Issue.all(:select => select, :conditions => conditions, :readonly => true, :group => grouping)
但我得到这个错误:
ActiveRecord::StatementInvalid (Mysql::Error: Unknown column 'issues.range_value' in 'where clause': SELECT YEAR(created_on)*1000+WEEK(created_on,1) as range_value, 'weeks' as range_type, count(*) as logged_hours, 1 as entries, 'priority_id' as grouping, issues.priority_id as group_id FROM `issues` WHERE (`issues`.`range_value` BETWEEN '2012012' AND '2012031' AND `issues`.`project_id` IN (1)) GROUP BY range_value, issues.priority_id ORDER BY 1 asc, 6 asc):
我的代码试图修改不是我的,所以我不能将任何新的字段或方法添加到Issues对象。所以我想,解决方案如this不适用于我。
好了,但我应该怎么跟做的方式那部分? :只读=> true – savvadia 2012-08-04 17:41:54
您可以在最后添加只读。它工作更好吗? – Dougui 2012-08-04 18:16:07
我问过,因为我只是不知道如何做到这一点......我看到过像select(),where(),group()这样的命令,但不是像readonly()这样的onr命令。所以你可以给我一行代码。 – savvadia 2012-08-04 19:50:31