我正在尝试让用户自动关注我的应用中的FB朋友。我能够获得用户的FB朋友的ids,但我不知道如何进行自动跟踪。
我得到他们的朋友' uid(fb id),所以我想我需要在我的应用中找到用户的uid与用户fb好友列表的uid匹配,然后让用户自动关注这些用户。你会怎么做?
user.rb
has_many :relationships, foreign_key: "follower_id", dependent: :destroy
has_many :followed_users, through: :relationships, source: :followed
has_many :reverse_relationships, foreign_key: "followed_id",
class_name: "Relationship",
dependent: :destroy
has_many :followers, through: :reverse_relationships, source: :follower
def self.from_omniauth(auth)
where(auth.slice(:provider, :uid)).first_or_initialize.tap do |user|
user.provider = auth.provider
user.uid = auth.uid
user.name = auth.info.name
user.first_name = auth.info.first_name
user.last_name = auth.info.last_name
user.email = auth.info.email
user.image = auth.info.image
user.oauth_token = auth.credentials.token
user.oauth_expires_at = Time.at(auth.credentials.expires_at)
user.save!
end
end
#gets uid of user's fb friends
def fbfriends
@graph = Koala::Facebook::API.new(oauth_token)
begin
@fbfriends = @graph.get_connections("me", "friends", fields: "id")
@uids = @fbfriends.map{ |v| v.values }.flatten
rescue Koala::Facebook::AuthenticationError => e
redirect_to '/auth/facebook'
end
@friends = User.where(uid: @uids)
end
def fb_user_id
self.fbfriends.map{ |v| v.id }
end
after_create :follow_fbfriends!
def follow_fbfriends!
relationships.create!(followed_id: fb_user_id)
end
用户秀
<%= @user.fb_user_id %>
浏览器输出
[1]
答案 0 :(得分:1)
可能的步骤:
@fbfriends
中,获取用户朋友的UID
个。@friends = User.where(uid: @fbfriends)
将为所有这些UID提供所有用户配置文件。@friends
朋友的followers
和设置关系进行迭代。修改强>:
可以看出,代码中的@fbfriends
返回一个哈希数组,而不是单独的UID。首先,将UID提取为:
@uids = @fbfriends.map{ |v| v.values }.flatten
#=> ['1654449181']
现在,使用带有User.where(uid: @uids)
的新数组来检索具有这些UID的用户(如果存在)。要设置与用户的关系,您可能需要阅读Michael Hartl's guide chapter。
编辑2 :
在follow_friends!
中,您必须遍历您获得的朋友ID,并为每个朋友ID创建关系:
def follow_fbfriends!
fb_user_id.each do |friend_id|
relationships.create!(followed_id: friend_id)
end
end