我正在尝试从控制器调用ActiveRecord模型范围。但是当我这样做时,它只返回nil,即使查询工作完全正常。
以下是模型:
class Stats < ActiveRecord::Base
scope :by_latest_date, ->{select("date, sum(users) AS users,
sum(clicks) AS clicks").group("date").limit(1)}
end
范围:by_latest_date应返回最近记录日期的用户和点击总和。但是当我从控制器调用它时:
class ChartsController < ApplicationController
def user_stats
@stats = Stats.by_latest_date
end
end
当数据库中有记录时,@ stats简单地设置为nil。当数据库中没有记录时,它将被设置为空数组。
我不明白为什么。当我将范围查询复制/粘贴到控制器中时,代码工作,当我将Stats.by_latest_date直接放入我的RSPEC测试时,代码也工作。也许控制器和示波器块有一些特殊之处?但如果有,我找不到它。
答案 0 :(得分:0)
我认为你试图让范围去做一些它不打算做的事情,它意味着在基础模型上确定范围而不是聚合。创建一个方法可能更容易。首先让它在控制台中工作,然后将其放入课堂中。
暂时 - 日期是一个日期(在非时间组件中) - 如果它是一个时间戳,那么分组将不是按实际日期而是按时间戳,因此您可能只得到最后一个。
分组无论如何都会订购数据,因为它必须将它们聚集在一起 - 但可能不是正确的顺序,你确定你得到了你想要的东西吗?