使用ActiveRecord(bigint列)选择总和查询没有结果

问题描述 投票:0回答:2

我有一个名为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>]>

它很奇怪,因为它适用于一个表而不是其他表...我甚至切换到另一个项目并尝试不同的表,我得到相同的行为。

ruby-on-rails activerecord ruby-on-rails-5
2个回答
0
投票

尝试在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。


0
投票

如果

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)
© www.soinside.com 2019 - 2024. All rights reserved.