我有一个实例化模型的控制器,然后调用一个方法来构建关联。我试图使用这个方法来设置模型的属性,但它不起作用,我想知道为什么。
这是我的代码:
#my controller
user = User.new
user.apply_omniauth(omniauth)
debugger
#my model
def apply_omniauth(omniauth)
email=omniauth["extra"]["user_hash"]["email"]
name=omniauth["extra"]["user_hash"]["name"]
authentications.build(:provider => omniauth['provider'],:uid => omniauth['uid'])
end
#irb
rails:6ree-1.8.7-2010.02 > user.name
=> nil
当我从控制器设置属性时,它就可以工作。
答案 0 :(得分:0)
尝试:
self.name=omniauth["extra"]["user_hash"]["name"]
您设置name
的方式实际上是在name
方法中设置了一个名为apply_omniauth
的局部变量。它不是对模型的name
属性的引用。要分配给模型的name
属性,您需要使用self.name