我建立了一個應用程序,用戶在那裏登錄扔有Facebook帳戶,我抓住他們的朋友和他們的教育歷史。它是這樣的:初始化朋友模型在軌道上
在用戶登錄並轉到SessionsController#創建:
class SessionsController < ApplicationController
def create
user = User.from_omniauth(env['omniauth.auth'])
end
end
的SessionsController方法調用創建在用戶模型的方法.from_omniauth:
def self.from_omniauth(auth)
where(auth.slice(:provider, :uid)).first_or_initialize.tap do |user|
user.provider = auth["provider"]
user.uid = auth["uid"]
...more code...
user.save!
user.add_friends
end
end
.from_omniauth方法調用User模型中的方法add_friends:
def add_friends
friends_data = facebook.get_connections("me", "friends", :fields => "name, id, education")
friends_data.each do |hash|
friend.name = hash["name"]
friend.uid = hash["id"]
if hash["education"]
hash["education"].each do |e|
if e["type"] == "High School"
friend.highschool_name = e["school"]["name"] if (!hash["education"].blank? && !e["school"].blank?)
elsif e["type"] == "Graduate School"
friend.graduateschool_name = e["school"]["name"] if (!hash["education"].blank? && !e["school"].blank?)
end
end
end
friend.save!
friend
end
end
我得到這個錯誤:
NameError in SessionsController#create
undefined local variable or method `friend' for #<User:0x007fad11d50eb0>
我知道這意味着我必須初始化的變量的朋友,但我不知道如何做到這一點的想法。任何想法,這將是非常有益的! =)
是啊,這工作,謝謝! – SHUMAcupcake 2012-07-10 14:50:29
一個問題,我的朋友模型看起來像這樣:[uid,name,highschool_name,graduateschool_name,user_id,created_at,updated_at],但user_id是空的。所以我必須以其他方式保存任何想法?我的模式如下所示:https://gist.github.com/3083962 – SHUMAcupcake 2012-07-10 15:18:43
取決於'user_id'的含義。如果這是當前用戶的ID,那麼使用'friend.user_id = self.id'。如果不是,請說明該字段的含義。 – Matzi 2012-07-10 15:25:22