0

我最近遇到了 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

如果加载了关系,它工作正常,但是当没有加载时,它会失败并出现错误。事实证明,当没有加载关系时,会对该关系进行大小调用,这实质上会更改查询,返回哈希并停止代码。aamethod undefinedcount

是隐含的行为吗?

对我来说,根据是否加载关系来更改方法语义有点违反直觉。

4

1 回答 1

0

这就是 ActiveRecord 关系的工作原理。您可以将其转换为数组并对其进行大小调整。

a = Stat.aggregated.to_a  
#in other place
if a.size > 0
  'do stuff'
else
  'do other stuff'
end
于 2013-08-07T14:40:28.327 回答