Reputation: 9415
I'm using the Public Activity gem to track user's comments. I would like to get fetch all unique user comments in a query. I tried doing the following:
PublicActivity::Activity.where(:trackable_type=>"Comment").where(:owner_id => user.id).all.select(:trackable_id).distinct
But I'm getting the error:
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>'
Does anyone know how to extract of a user's unique activities based on trackable_id?
For reference, this is what my query results look like before I attempt to fetch the unique records:
Upvotes: 0
Views: 328
Reputation: 9415
The answer was to run the following:
PublicActivity::Activity.where(:trackable_type=>"Comment").where(:owner_id => user.id).select("DISTINCT ON (trackable_id) *")
Upvotes: 0
Reputation: 3427
I did following on Rails Console, see what i got
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 >
As you can see,u are performing select operation on an array, that's why u are get such error ArgumentError: wrong number of arguments(1 for 0)
try this instead,
PublicActivity::Activity.where(:trackable_type=>"Comment").where(:owner_id => user.id).select(:trackable_id).distinct
Upvotes: 2