【问题标题】:ActiveRecord Relation size strange behaviorActiveRecord 关系大小奇怪的行为
【发布时间】:2013-08-08 21:36:42
【问题描述】:

我最近遇到了 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,这实际上改变了查询,返回一个哈希,并停止了代码。

这是一种隐含的行为吗?

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

【问题讨论】:

    标签: ruby-on-rails ruby activerecord


    【解决方案1】:

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

    a = Stat.aggregated.to_a  
    #in other place
    if a.size > 0
      'do stuff'
    else
      'do other stuff'
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-31
      • 2021-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多