2010-11-01 56 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