如何找到查询结果的大小

Atr*_*tri 3 arrays sqlite activerecord group-by ruby-on-rails

我在rails中有以下查询:

records = Record.select('y_id, source')
                .where(:source => source, :y_id => y_id)
                .group(:y_id, :source)
                .having('count(*) = 1')
Run Code Online (Sandbox Code Playgroud)

如果我得到以下输出puts records
[#<Record source: "XYZ", y_id: 10000009>, #<Record source: "XYZ", y_id: 10000070>]

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

  • 当记录是具有2个元素的数组时,为什么不records.size打印2group by查询结果是否由于某些原因而有所不同?

  • 我应该怎么做才能得到 records

Ben*_*ker 5

我可能走错了路,但我认为问题在于.size工作方式。

大小会自动尝试确定是致电.count还是.length。它们的行为方式如下:

  • .count执行一个SQL COUNT
  • .length计算所得数组的长度

但是,偶尔.size会返回哈希值(因为它决定使用.count

因此,您的解决方案可能是使用.length它将返回整数的方法。