我在我的应用中使用此逻辑: 的控制器
@current_user = User.find_or_create_from_oauth(auth_hash)
user.rb
def self.find_or_create_from_oauth(auth_hash)
provider = auth_hash["provider"]
uid = auth_hash["uid"].to_s
case provider
when 'twitter'
if user = self.find_by_twitter_uid(uid)
return user
else
return self.create_user_from_twitter(auth_hash)
end
end
end
def self.create_user_from_twitter(auth_hash)
a = self.create({
:twitter_uid => auth_hash["uid"],
:name => auth_hash["info"]["name"]
})
puts a.inspect
user = User.find_by_twitter_uid(a.twitter_uid)
puts '---'
puts user.inspect
end
self.create
之后我需要立即执行此行:
Assignment.create(:user_id => a.id, :role_id => 2)
问题是,行puts user.inspect
返回类似这样的内容:
#<User id: nil, name: "...name...", twitter_uid: "96580821", provider: "twitter", created_at: nil, updated_at: nil>
为什么哈希返回 id:nil ?
或者,还有其他方法,如何获取上次创建的记录的ID?
答案 0 :(得分:0)
如果用户已正确保存,您可以直接使用a
:
a.assignments.create(:role_id => 2)
否则(使用create!
而不是create
检查)可能会出现验证错误。