【发布时间】:2013-08-08 21:36:42
【问题描述】:
我最近遇到了 ActiveRecord Relation 的一些奇怪行为。
假设,我有一个具有以下属性的Stat 模型:
clicksviewscreated_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,这实际上改变了查询,返回一个哈希,并停止了代码。
这是一种隐含的行为吗?
对我来说,根据是否加载关系来更改方法语义有点违反直觉。
【问题讨论】:
标签: ruby-on-rails ruby activerecord