【问题标题】:Save facebook friends?保存脸书好友?
【发布时间】:2012-06-30 15:20:38
【问题描述】:

我正在使用 rails 3 并使用 koala gem 连接到 facebook graph api。 我正在使用omniauth 对用户进行身份验证。

所以当新用户登录到站点时,session_controller 会处理新用户:

class SessionsController < ApplicationController
def create
  user = User.from_omniauth(env['omniauth.auth'])
  session[:user_id] = user.id
  redirect_to root_url, notice: "Signed in!"
end 

create方法调用User.rb模型中的“from_omniauth”类方法,创建一个新用户:

class User < ActiveRecord::Base
 has_many :friends

    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.image = auth["info"]["image"]
     user.email = auth["info"]["email"]
     user.gender = auth["extra"]["raw_info"]["gender"]
     user.location = auth["extra"]["raw_info"]["location"]["name"]          
     user.token = auth["credentials"]["token"]
    end
     user.save!
    end

我还想保存用户的 facebook 好友并将其存储在一个名为好友的单独表格中,所以我制作了这个好友模型:

class Friend < ActiveRecord::Base
  attr_accessible :name
  belongs_to :user
  validates :user_id, presence: true

  def facebook
    @Facebook ||= Koala::Facebook::API.new(token)
  end

  def add_friends
    facebook { |fb| fb.get_connection("me", "friends") }
  end
end 

但是我不知道如何存储用户朋友,我想知道:

  • 如何创建用户并将其存储为好友
  • 我应该在哪里调用 add_friends 方法?
  • fb.get_connection("me", "friends") 返回一个哈希数组,例如 &gt; [{"name"=&gt;"Johan Gyllenspetz", "id"=&gt;"3624556"}, {"name"=&gt;"Gustaf Josefsson", 。我想存储名称和uid。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 facebook-graph-api koala


    【解决方案1】:

    我会这样做:

    class User < ActiveRecord::Base
      has_many :friends
    
      def self.from_omniauth(auth)
        user = 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.image = auth["info"]["image"]
          user.email = auth["info"]["email"]
          user.gender = auth["extra"]["raw_info"]["gender"]
          user.location = auth["extra"]["raw_info"]["location"]["name"]          
          user.token = auth["credentials"]["token"]
        end
        user.add_friends
        user.save
        user
      end
    
      def add_friends
        @facebook.get_connection("me", "friends").each do |hash|
          self.friends.where(:name => hash['name'], :uid => hash['id']).first_or_create
        end
      end
    
      private
    
      def facebook
        @facebook ||= Koala::Facebook::API.new(token)
      end
    
    end
    

    【讨论】:

    • 我收到此错误:#<0x007fcfcb30e218>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多