【发布时间】:2015-03-10 12:05:03
【问题描述】:
我正在尝试从控制器调用 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
Scope :by_latest_date 应该返回最近记录日期的用户和点击的总和。但是当我从控制器调用它时:
class ChartsController < ApplicationController
def user_stats
@stats = Stats.by_latest_date
end
end
当数据库中有记录时,@stats 被简单地设置为 nil。当数据库中没有记录时,设置为空数组。
我不明白为什么。当我将范围查询复制/粘贴到控制器中时,该代码有效,当我将 Stats.by_latest_date 直接放入我的 RSPEC 测试时也有效。也许控制器和作用域块有什么特别之处?但如果有,我找不到。
【问题讨论】:
-
你不是在细箭头之前错过了
,吗?不过它应该会破坏测试... -
是的,它在我的程序中,所以我将它添加到问题中。这里的代码解释而不是完全复制我的代码。
-
你有没有试过用 lambda 代替细箭头,甚至把它放到类方法中?
-
我们只需要一个块,因为它不带参数。
-
你使用的是哪个数据库?
标签: ruby-on-rails-3 postgresql activerecord