Rails如何从'group'查询中获取值

时间:2014-08-11 16:27:47

标签: ruby-on-rails ruby redmine

我正在研究Rails的Redmine应用程序。

我按如下方式进行查询:

re = Issue.select("sum(id) as test_total").group("tracker_id")

但是我无法得到' total_price'值。这是' re.inspect'

的结果
[#<Issue >, #<Issue >, #<Issue >]

它只是一个空的Issue对象数组。

然后我在日志中看到了查询:

SELECT sum(id) as test_total FROM "issues" GROUP BY tracker_id

如果我通过数据库控制台运行此查询,结果是:

| test_total |
-------------
|     1      |
-------------
|     2      |
-------------
|     3      |
-------------

它有3行结果。

之前的&#39;有3个元素,但每个元素都是一个空的Issue对象。

我怎样才能获得&total #price&#39;来自&#39;?&#39;

谢谢。

1 个答案:

答案 0 :(得分:1)

首先:

re.all.map &:attributes

将显示您可用的属性。

其次,你为什么要寻找&total #price&#39;当您的查询创建一个名为&#39; test_total&#39;?

的总和时
re.first.test_total

应该这样做。

如果您想要合计的总数:

re.all.map(&:test_total).inject(:+)

&#39;映射&#39;通过处理块从旧的数组创建一个新数组。 &amp;:test_total是{ |i| i.test_total }的简写,创建了一个test_total值数组。 Inject对传递给循环的每次迭代的变量执行操作。在这种情况下,它会调用&#39; +&#39;传递变量和每个数组成员的方法。有关更深入的解释,请参见此处:

How does "(1..4).inject(&:+)" work in Ruby