2010-11-05 58 views
0

我有一個控制器實例化一個模型,然後調用一個方法來建立關聯。我試圖用這種方法來設置模型的屬性,但它沒有工作,我想知道爲什麼。如何使用方法調用設置Rails模型的實例屬性?

這裏是我的代碼:

#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

嘗試:

self.name=omniauth["extra"]["user_hash"]["name"] 

要設置name的方式實際上是設置在apply_omniauth方法稱爲name一個局部變量。這不是對模型的name屬性的引用。要分配給型號的name屬性,您需要使用self.name

+1

訪問它。或者,您可以使用'write_attribute(email,'[email protected]')'。這繞過了任何覆蓋的屬性設置器。 – 2010-11-05 23:32:22

相關問題