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"}
谢谢,但现在有一个我如何保存的问题。它说未定义的方法'保存!对于# –
Leahcim
已更新,以说明这一点...... –
好的,这是有道理的,但我仍然需要从用户数据散列 – Leahcim