1

私は Rails 3 に取り組んでおり、koala gem を使用して Facebook グラフ 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") は、次のようなハッシュの配列を返します> [{"name"=>"Johan Gyllenspetz", "id"=>"3624556"}, {"name"=>"Gustaf Josefsson",。そして、名前とuidを保存したいと思います。
4

1 に答える 1

0

これは私がこれを行う方法です:

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
于 2012-06-30T15:56:36.260 に答える