基本Rails - ActiveRecord范围无效

时间:2015-01-12 16:45:02

标签: ruby-on-rails-3 postgresql activerecord

我正在尝试从控制器调用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测试时,代码也工作。也许控制器和示波器块有一些特殊之处?但如果有,我找不到它。

1 个答案:

答案 0 :(得分:0)

我认为你试图让范围去做一些它不打算做的事情,它意味着在基础模型上确定范围而不是聚合。创建一个方法可能更容易。首先让它在控制台中工作,然后将其放入课堂中。

暂时 - 日期是一个日期(在非时间组件中) - 如果它是一个时间戳,那么分组将不是按实际日期而是按时间戳,因此您可能只得到最后一个。

分组无论如何都会订购数据,因为它必须将它们聚集在一起 - 但可能不是正确的顺序,你确定你得到了你想要的东西吗?