我有一个名为banner的表,其列号为id(bigint),单击(bigint)和user_id(bigint)
在我使用以下请求时,在控制台,甚至控制器中:
Banner.select("sum(click) as clicks").where(user_id: 5)
我明白了:
=> #<ActiveRecord::Relation [#<Banner id: nil>]>
我在phppgadmin SQL中复制了相同的结果请求:
SELECT sum(click) as clicks FROM "banners" WHERE "banners"."user_id" = 5
它的工作原理,但有活跃的记录,它没有!!?
Rails版本:5.1.4
UPDATE
我试过Banner.select("sum(id)")
,它给了我=> #<ActiveRecord::Relation [#<Banner id: nil>]>
用户表:User.select("sum(id)")
它给出:=> #<ActiveRecord::Relation [#<User id: nil, sum: 0.1e1>]>
它很奇怪,因为它适用于一个表而不是其他表...我甚至切换到另一个项目并尝试不同的表,我得到相同的行为。
尝试在id上添加group子句。
Banner.select("sum(click) as clicks").where(user_id: 5).group(:id)
它将返回ActiveRecord::Relation [#<Banner id: nil>, #<Banner id: nil>
,现在当你调用.first.clicks
时,它会给你想要的输出(点击总和)。如果你想要id,那么你必须在select子句中指定id。
如果
banners = Banner.select("sum(click) as clicks").where(user_id: 5)
banners.class
将是Banner:ActiveRecord_Relation
,为了获取clicks
你必须使用.first
或.last
(因为它只有一个元素),如下
banners.last.clicks
您可以使用验证它
Banner.where(user_id: 5).sum(:click)