0

更新:問題の一部は、次のようなデータにアクセスすることで解決された可能性があります

first_name = graphdata[:first_name]

の代わりに

first_name = userdata.first name

しかし、それを保存しようとすると、このエラーが発生します

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

元の問題

このコードにはおそらく複数の問題があると確信しています。

私は、コアラを使用してFacebookで認証し、ユーザーデータを取得するRailsアプリhttps://github.com/banane/sample-koala-rails-appのクローンで遊んでいます。これは、callback以下のhome_controller.rbのメソッドを使用して行います。

作成したユーザーモデルに認証トークンとユーザーデータを保存しようとしています。

以下のコールバックメソッドで、このコードを挿入しました

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

Userモデルで作成した「oath」クラスメソッドを使用して、データをUserモデルに保存しようとします(以下を参照)。そのインスタンス変数@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"}
4

1 に答える 1

1

ハッシュに誤ってアクセスしている可能性があるようです。これを試してください。

  def self.oath(access_token, userdata)
    create! userdata.merge({:access_token => access_token})
  end
于 2012-09-14T23:14:26.937 に答える