我在rails中有以下查询:
records = Record.select('y_id, source')
.where(:source => source, :y_id => y_id)
.group(:y_id, :source)
.having('count(*) = 1')
如果我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
不打印2
?group by
查询结果是否因某种原因而表现不同?- 的大小
我应该怎样做才能获得
records
答案 0 :(得分:5)
我可能走错了路,但我认为这个问题与.size
的工作方式有关。
尺寸会自动尝试确定是要拨打.count
还是.length
。这些行为如下:
然而,在偶然事件.size
将返回一个哈希值(因为它决定使用.count
)
所以你的解决方案可能是使用.length
,它将返回一个整数。
答案 1 :(得分:3)
你可以使用:
results.length
size方法使用以这种方式运行的sql count方法。
答案 2 :(得分:0)
我刚刚在上面的示例中尝试了一个变体(使用我自己现有的Rails应用程序和数据库)并且它没有问题:
records = Site.select('name','url')
.where(:name => 'Washington Post', :url => 'https://www.washingtonpost.com/')
.group(:name, :url)
.having('count(*) = 1')
=> #<ActiveRecord::Relation [#<Site id: nil, name: "Washington Post", url: "https://www.washingtonpost.com/">]>
records.size
=> 1
您确定您的记录模型是否继承自ActiveRecord::Base
?