2010-11-01 58 views
1

我正在使用Devise進行身份驗證,但我使用了兩個用戶模型,即Buyer和Seller。Rails中的別名方法3

默認情況下,Devise會生成兩個方法,例如current_buyer和current_seller。

我想清理我的代碼,並在我的ApplicationController的before_filter中,我想將適當的方法別名爲current_user。

在Rails 3中這樣做的最好方法是什麼?

回答

1

我同意balexand你應該有一個登錄模型,並按角色分開。

但是它給你並沒有使用的方法做到這一點:

def current_user 
    current_seller || current_buyer 
end 

這將返回sellerbuyernil

+0

我也開始這麼想。與OmniAuth集成也被證明是一種痛苦,因爲它已經假定了一個模型,據我所知,我的解決方法有點兒'meh'。現在我試圖使用User的兩個子類來定義默認角色,而不必訴諸於質量分配。 – Dex 2010-11-01 02:55:31

+0

爲什麼不只保留賣方和買方,而是將登錄賬戶分開?所以賣方和買方都有一個login_account和一個login_account belongs_to一個賣方或一個買方(當然是多態的)。 – PeterWong 2010-11-01 02:58:57

+0

我最初嘗試做類似的事情。用一個名爲'users'的表進行認證,但在我的遷移中有't.references:actual_user,:polymorphic => true'其中:actual_user是買方或賣方對象。我只是無法弄清楚如何確定範圍,因此當我去賣家/ sign_up或買家/ sign_up時,它知道如何設置:actual_user。 – Dex 2010-11-01 03:12:47

1

由於擁有兩個用戶模型,您可能會使設計變得比必要的複雜。您可能需要考慮使用一個用戶模型進行身份驗證。然後,如果需要,您可以爲買方和賣方分配角色。

但如果你真的只是想別名ApplicationController中的方法,你可以這樣做:

private 
    alias :current_user :current_seller 

或者,如果你需要的東西更動態,你可以只使用一種方法。

+0

我相信alias_method比別名更可取,因爲alias_method允許您稍後更改別名。 – Dex 2010-11-01 02:54:50