2012-09-14 23 views
0

更新:問題的一部分可能已通過訪問像的Rails:哈希未定義的方法'名稱」

first_name = graphdata[:first_name] 

,而不是像

first_name = userdata.first name 

,但是當我去的數據解決爲了節省,我現在得到這個錯誤

undefined method `save!' for #<Class:0x00000102dbe068> 

原始問題

我敢肯定這段代碼可能有多個問題。

我在玩Rails應用程序https://github.com/banane/sample-koala-rails-app的克隆,它使用Koala來與Facebook進行身份驗證並獲取用戶數據。它使用下面home_controller.rb中的callback方法執行此操作。

我試圖將身份驗證令牌和用戶數據保存到我創建的用戶模型。

在回調方法下面,我插入這個代碼

 user = User.oath(session[:access_token], @user_info) ### my code/ likely wrong 
    session[:user_id] = user.id       ### my code/ likely wrong 

試圖將數據保存到用戶模型中,使用「誓」類方法我上的用戶模型(見下文)。請注意,我甚至不知道我是否可以傳遞一個實例變量@user_info進入方法...

當我測試了一下,我得到的錯誤是

undefined method `name' for #<Hash:0x00000103457d70> 

和跟蹤說

app/models/user.rb:8:in `oath' 
    app/controllers/home_controller.rb:30:in `callback' 

下面的代碼

User.rb

def self.oath(access_token, userdata)  #my code/ likely wrong 


    name = userdata.name 
    first_name = userdata.first_name 
    last_name = userdata.last_name 
    username = userdata.username 
    gender = userdata.gender 
    email = userdata.email 
    access_token = access_token 
    save! 
    end 

Home_controller.rb(朝回調方法結束時,我嘗試保存用戶數據)

def callback 
    if params[:code] 
     # acknowledge code and get access token from FB 
      session[:access_token] = session[:oauth].get_access_token(params[:code]) 
     end  

     # auth established, now do a graph call: 

     @api = Koala::Facebook::API.new(session[:access_token]) 
     begin 
      @user_info = @api.get_object("me") 
      @graph_data = @api.get_object("/me/statuses", "fields"=>"message") 
     rescue Exception=>ex 
      puts ex.message 
     end 

     user = User.oath(session[:access_token], @user_info) #my code/likely wrong 
     session[:user_id] = user.id 


     respond_to do |format| 
     format.html { }   
     end 


    end 

的@user_info中有

{"id"=>"8331884858", "name"=>"Michael MYLASTNAME", "first_name"=>"Michael", "last_name"=>"MYLASTNAMe", "link"=>"http://www.facebook.com/myusername", "username"=>"myusername", "gender"=>"male", "email"=>"myemail", "timezone"=>5, "locale"=>"en_US", "verified"=>true, "updated_time"=>"2012-07-29T06:52:12+0000"} 

回答

1

所有這些數據聽起來你可能只是正確訪問哈希,試試這個:

def self.oath(access_token, userdata) 
    create! userdata.merge({:access_token => access_token}) 
    end 
+0

謝謝,但現在有一個我如何保存的問題。它說未定義的方法'保存!對於# Leahcim

+0

已更新,以說明這一點...... –

+0

好的,這是有道理的,但我仍然需要從用戶數據散列 – Leahcim

相關問題