0

我正在使用公共活动 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>'

有谁知道如何根据 trackable_id 提取用户的独特活动?

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

在此处输入图像描述

4

2 回答 2

2

我在 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: wrong number of arguments(1 for 0)

试试这个,

 PublicActivity::Activity.where(:trackable_type=>"Comment").where(:owner_id => user.id).select(:trackable_id).distinct
于 2014-09-05T20:22:02.950 回答
0

答案是运行以​​下命令:

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

于 2014-09-05T21:17:45.473 回答