0
行
我在我的應用程序使用此邏輯的ID: 控制器導軌 - 如何立即得到插入
@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
緊接在之後我需要跑這條線:
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:無?
或者,有沒有其他方法,如何獲取最後創建的記錄的ID?
'放一個.inspect'應該已經給你新插入的用戶記錄的id。我不認爲你需要通過twitter_uid找到用戶;你可以直接使用'a'對象(因爲你似乎在'Assignment.create'行看起來是正確的,這行不行嗎? –
記錄可能實際上並沒有被保存,請確保保存的記錄實際上是有效的 –
Andrew Marshall可能是對的,如果創建不成功,我會將'a = self.create'更改爲'a = self.create!'以引發錯誤。 –