裁切掉。如果你能得到一個數組對於用戶的朋友,您可以在一個SQL語句中使用IN
(根據屬性等,這裏有一些手動和/或僞代碼)找到它們:
uids = @friends.collect(&:uid)
# uids is an array of Facebook UID's, say [1234, 5678, 9012]
registered_friends = User.where('fb_uid IN (?)', uids)
# "SELECT users.* FROM users WHERE (fb_uid IN (1234, 5678, 9012))"
如果您的Facebook數據使用其他型號,則可以選擇關閉該型號並執行includes
以引入用戶。
registered_friends = Authorizations.where(:type => 'Facebook') \
.where('fb_uid IN (?)', uids).includes(:user).collect(&:user)
[更新]
看起來像考拉返回基於字符串的哈希值的數組,所以你將無法使用collect(&:id)
獲得的ID。這是我用來獲取控制檯上的ID陣列(敏感數據掩蓋,很明顯):
pry(main)> oauth = Koala::Facebook::OAuth.new 'xxxxxxx', 'yyyyyyyyy'
=> #<Koala::Facebook::OAuth:0x00000100d03be8>
pry(main)> token = 'zzzzzzzzzz'
=> "zzzzzzzzzz"
pry(main)> graph = Koala::Facebook::GraphAPI.new token
=> #<Koala::Facebook::GraphAPI:0x00000100ce3ac8>
pry(main)> friends = graph.get_connections "me", "friends"
=> [{"name"=>"A Friend", "id"=>"An ID"}, {"name"=>"Another Friend", "id"=>"Another ID"}]
uids = friends.collect { |f| f["id"] }
=> ["An ID", "Another ID"]
另外,如果你是以下Rails的約定,你Services
表的id
場將成爲記錄的主鍵,而不是服務用戶的Facebook ID,因此您可能需要在另一個字段上進行查詢。
我已經嘗試實現你的答案(見上面的截圖),但是當我打電話的用戶/索引視圖@uids(其中即時通訊做,看它是否得到正確的信息),顯示的數字是不來自圖表API調用的用戶的Facebook ID。我收到一個與「21565518202156551420」無關的數字。有什麼我做錯了嗎?我感謝你的智慧! – ahuang7 2011-04-28 03:30:30
我已經更新了我的答案後,考拉與考拉;看看你有沒有更多的運氣! – 2011-04-28 14:58:25
哇,真棒,你是編碼神。再次感謝! – ahuang7 2011-04-28 19:01:39