Я создаю приложение, в котором пользователь подписывает бросок на счет 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 вызывает метод 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
Одна из проблем, моя модель друга выглядит так: [uid, name, highschool_name, graduateschool_name, user_id, created_at, updated_at], но user_id пуст. Так что я должен сэкономить по-другому, любые идеи? моя схема выглядит так: https://gist.github.com/3083962 – SHUMAcupcake
Зависит от значения 'user_id'. Если это текущий идентификатор пользователя, используйте команду 'friend.user_id = self.id'. Если нет, укажите значение поля. – Matzi