裁切掉。如果你能得到一个数组对于用户的朋友,您可以在一个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