如何查找查询结果的大小

我在rails中有以下查询:

records = Record.select('y_id, source') .where(:source => source, :y_id => y_id) .group(:y_id, :source) .having('count(*) = 1') 

如果我puts records我会得到以下输出:
[#, #]

这看起来像输出数组中有2个元素。 但是当我尝试做records.size我得到:
{[10000009, "XYZ"]=>1, [10000070, "XYZ"]=>1}

  • 当records是一个包含2个元素的数组时,为什么records.size不会打印2 ? 由于某种原因group by查询结果group by行为是否有所不同?

  • 我该怎么做才能获得records的大小

我可能走错了路,但我认为这个问题与.size工作方式有关。

大小将自动尝试确定是否调用.count.length 。 这些行为如下:

  • .count执行SQL COUNT
  • .length计算结果数组的长度

然而,在occassion .size将返回一个哈希(因为它决定使用.count

所以你的解决方案可能是使用.length ,它将返回一个整数。

你可以使用它:

 results.length 

size方法使用sql count方法,它以这种方式运行。

我刚刚在上面的例子中尝试了一个变体(使用我自己现有的Rails应用程序和数据库),它没有问题:

 records = Site.select('name','url') .where(:name => 'Washington Post', :url => 'https://www.washingtonpost.com/') .group(:name, :url) .having('count(*) = 1') => #]> records.size => 1 

您确定您的Record模型是否inheritance自ActiveRecord::Base