Ruby on rails PublicActivity:获取用户的所有不同活动

Ruby on rails PublicActivity:获取用户的所有不同活动,ruby-on-rails,activerecord,distinct,public-activity,Ruby On Rails,Activerecord,Distinct,Public Activity,我正在使用公共活动gem来跟踪用户的评论。我希望获取查询中所有唯一的用户注释。我试着做了以下几点: PublicActivity::Activity.where(:trackable_type=>"Comment").where(:owner_id => user.id).all.select(:trackable_id).distinct 但我得到了一个错误: ArgumentError: wrong number of arguments(1 for 0) from (

我正在使用公共活动gem来跟踪用户的评论。我希望获取查询中所有唯一的用户注释。我试着做了以下几点:

PublicActivity::Activity.where(:trackable_type=>"Comment").where(:owner_id => user.id).all.select(:trackable_id).distinct
但我得到了一个错误:

ArgumentError: wrong number of arguments(1 for 0)
    from (irb):14:in `select'
    from (irb):14
    from /Users/ttseng/.rvm/gems/ruby-1.9.3-p448/gems/railties-3.2.15/lib/rails/commands/console.rb:47:in `start'
    from /Users/ttseng/.rvm/gems/ruby-1.9.3-p448/gems/railties-3.2.15/lib/rails/commands/console.rb:8:in `start'
    from /Users/ttseng/.rvm/gems/ruby-1.9.3-p448/gems/railties-3.2.15/lib/rails/commands.rb:41:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'
有人知道如何根据可跟踪的_id提取用户的独特活动吗

作为参考,这是我在尝试获取唯一记录之前的查询结果:


我在Rails控制台上做了如下操作,看看我得到了什么

 2.0.0p353 :020 > PublicActivity::Activity.where(id:1).class
 => ActiveRecord::Relation::ActiveRecord_Relation_PublicActivity_Activity 
2.0.0p353 :021 > PublicActivity::Activity.all.class
 => ActiveRecord::Relation::ActiveRecord_Relation_PublicActivity_Activity 
2.0.0p353 :022 > PublicActivity::Activity.where(id:1).all.class
DEPRECATION WARNING: Relation#all is deprecated. If you want to eager-load a relation, you can call #load (e.g. `Post.where(published: true).load`). If you want to get an array of records from a relation, you can call #to_a (e.g. `Post.where(published: true).to_a`). (called from irb_binding at (irb):22)
W, [2014-09-06T01:47:09.341145 #8594]  WARN -- : DEPRECATION WARNING: Relation#all is deprecated. If you want to eager-load a relation, you can call #load (e.g. `Post.where(published: true).load`). If you want to get an array of records from a relation, you can call #to_a (e.g. `Post.where(published: true).to_a`). (called from irb_binding at (irb):22)
  PublicActivity::Activity Load (0.6ms)  SELECT "activities".* FROM "activities" WHERE "activities"."id" = 1
D, [2014-09-06T01:47:09.343063 #8594] DEBUG -- :   PublicActivity::Activity Load (0.6ms)  SELECT "activities".* FROM "activities" WHERE "activities"."id" = 1
 => Array 
2.0.0p353 :023 > 
正如您所看到的,您正在对数组执行选择操作,这就是为什么您会得到这样的错误ArgumentError:0的arguments1数目错误

试试这个

 PublicActivity::Activity.where(:trackable_type=>"Comment").where(:owner_id => user.id).select(:trackable_id).distinct

答案是运行以下程序:

PublicActivity::Activity.where(:trackable_type=>"Comment").where(:owner_id => user.id).all.select(:trackable_id).distinct

PublicActivity::Activity.where:trackable\u type=>Comment.where:owner\u id=>user.id.selectDISTINCT ON trackable\u id*

感谢您的回复。当我在不使用all的情况下运行查询时,我得到了一个不同的错误:Hirb error:missing attribute:viewsed/app/config/initializers/public_activity.rb:34:在'init'中,原来这是Hirb的问题,这是另一个问题。当我删除自定义初始化代码时,它会工作。谢谢实际上,这将返回一个可跟踪的_id数组,而不是实际的公共活动记录。是否可以返回记录?这就是select的功能,您可以在select中添加更多字段。如果您向select添加更多字段,它如何知道在哪个字段上执行uniq?