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

时间:2017-12-29 10:03:10

标签: ruby-on-rails activerecord ruby-on-rails-5

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

更新

我尝试了Banner.select("sum(id)"),它给了我=> #<ActiveRecord::Relation [#<Banner id: nil>]>

使用用户表:User.select("sum(id)"),它会:=> #<ActiveRecord::Relation [#<User id: nil, sum: 0.1e1>]>

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

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分:0)

如果

$(document).ready(function() {
     value = 1;
     $('#radio').click(function() {
         if($('#radio2').is(':checked'))  
         {
             valuePicker("#valuePicker", 5);    //this line is added
         } 
         else 
         {
             valuePicker("#valuePicker", 1);    //this line is added
         };
     });
     valuePicker("#valuePicker", value);    
});

banners = Banner.select("sum(click) as clicks").where(user_id: 5) banners.class,要获取Banner:ActiveRecord_Relation,您必须使用clicks.first(因为它只有一个元素) ),如下所示

.last

您可以使用

进行验证
banners.last.clicks