2013-02-12 65 views
0

我正在研究微型社交網絡,我有兩種不同的帳戶類型,用戶可以是簡介或頁面。修改關係協會

class User < ActiveRecord::Base 

    has_one :profile 
    has_one :page 

end 

現在,當我想顯示用戶名,我做current_user.profile.name,但如果用戶是「頁」,我得到一個錯誤,很明顯。

所以,我想這個

private 
    def current_user 
    if session[:user_id] 
     @current_user = User.find(session[:user_id]) 

     if @current_user.account_type == 'profile' 
     @current_user.profile = @current_user.page 
     end 

    end 
    end 

但它不工作。

任何幫助都很讚賞。非常感謝!

+0

這是一個有點混亂 - 如果帳戶類型是一個配置文件,你爲什麼會設置自己作爲一個頁面?另外,我不確定'@ current_user.profile = @ current_user.page'會做什麼,但'@ current_user.profile'將外鍵存儲到'profile',所以你需要存儲'如果你真的想這樣做的話。 – TheDude 2013-02-12 23:16:32

+0

我試圖刪除current_user的「profile」var,並且他沒有,並將配置文件設置爲頁面。所以我不必在每個視圖中的current_user.profile和current_user.page之間進行更改。相反,我只是使用current_user.profile爲 – 2013-02-12 23:19:03

回答

0

我真的不知道你在問什麼,但你可以添加一個方法來User模型來處理這個問題:

class User < ActiveRecord::Base 

    has_one :profile 
    has_one :page 

    def name 
    if self.account_type == 'profile' 
     return self.profile.name 

    return <whatever for page> 
    end 
end 

編輯:

對於多個領域,爲什麼不使用爲User方法:

class User < ActiveRecord::Base 

    # other code removed 

    def get_info(method, *args) 
     if self.account_type == 'profile' 
      return self.profile.send(method, *args) 
     end 
     self.page.send(method, *args) 
    end 
end 

因此,要利用這一點,說我們有a = User.find(:id)與任何id。然後,你可以做,假設aaccount_typeprofile

a.get_info(:name) # => a.profile.name

+0

是的,事情是我有很多字段,例如,配置文件有名稱,年齡,性別等等。然後,頁面有名稱,說明,地址,國家等 – 2013-02-12 23:16:24

+0

如果你想這樣做,我增加了更多。 – TheDude 2013-02-12 23:24:23

+0

是的,但現在我做了current_user.name並沒有得到任何東西,或者我用錯了嗎?這是我第一次看到method_missing – 2013-02-12 23:25:09