我最近遇到了 ActiveRecord Relation 的一些奇怪行为。假设,我有一个Stat
具有以下属性的模型:
clicks
views
created_at
- 和别的
进一步假设我有以下范围:
scope :aggregated, select('SUM(clicks) as clicks, SUM(views) as views).group('DATE(created_at)')
结果,我希望得到一个包含按天聚合的信息的 Stat 对象数组,事实就是如此。但现在考虑一下:
# in one place
a = Stat.aggregated
#in other place
if a.size > 0
'do stuff'
else
'do other stuff'
end
如果加载了关系,它工作正常,但是当没有加载时,它会失败并出现错误。事实证明,当没有加载关系时,会对该关系进行大小调用,这实质上会更改查询,返回哈希并停止代码。a
a
method undefined
count
是隐含的行为吗?
对我来说,根据是否加载关系来更改方法语义有点违反直觉。