2014-09-05 9 views
0

Я использую Gisma Public Activity для отслеживания комментариев пользователей. Я хотел бы получить все уникальные комментарии пользователя в запросе. Я пытался делать следующее:PublicActivity: получить все отличные действия пользователя

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?

Для справки, это то, что мои результаты запроса выглядеть перед попыткой принести уникальные записи:

enter image description here

ответ

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 > 

Как вы можете видеть, вы выполняете , выберете операцию на массиве , вот почему вы получаете такой erro г ArgumentError: wrong number of arguments(1 for 0)

попробовать это вместо того, чтобы,

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

благодарит за ваш ответ. когда я запускаю запрос без «всех», я получаю другую ошибку: Hirb Error: отсутствующий атрибут: просмотрен /app/config/initializers/public_activity.rb:34:in 'init ' – scientiffic

+0

Оказывается, это была проблема с HIRB, что является другой проблемой. Когда я удаляю пользовательский код инициализации, он работает. благодаря! – scientiffic

+0

Фактически, это возвращает массив trackable_ids, а не фактические записи активности. возможно ли вернуть записи? – scientiffic

0

Ответ был бежать следующее:

PublicActivity :: Activity.where (: trackable_type => "Комментарий"), где (:. owner_id = > user.id) .select ("DISTINCT ON (trackable_id) *")