2014-09-05 52 views
0

我正在使用公共活動gem來跟蹤用戶的評論。我想在查詢中獲取所有唯一的用戶註釋。我試圖做以下幾點: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

我沒on 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 > 

正如你所見,你正在執行select操作array,這就是爲什麼你得到這樣的錯誤[R 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錯誤:缺少屬性:查看 /app/config/initializers/public_activity.rb:34:in'初始化' – scientiffic 2014-09-05 20:43:26

+0

事實證明這是一個問題HIRB,這是一個不同的問題。當我刪除自定義初始化代碼時,它可以工作。謝謝! – scientiffic 2014-09-05 20:46:44

+0

實際上,這會返回一個trackable_id數組,而不是實際的公共活動記錄。是否有可能返回記錄? – scientiffic 2014-09-05 20:59:12

0

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

PublicActivity :: Activity.where(:trackable_type => 「註釋」),其中(:owner_id = > user.id).select(「DISTINCT ON(trackable_id)*」)

相關問題