【问题标题】:Aliasing Methods in Rails 3Rails 3 中的别名方法
【发布时间】:2010-11-01 00:26:01
【问题描述】:

我正在使用 Devise 进行身份验证,但我使用的是买方和卖方两种用户模型。

默认情况下,Devise 会生成 current_buyer 和 current_seller 两种方法。

我想清理我的代码,并且在我的 ApplicationController 的 before_filter 中,我想将适当的方法别名为 current_user。

在 Rails 3 中最好的方法是什么?

【问题讨论】:

    标签: ruby-on-rails ruby devise


    【解决方案1】:

    我同意 balexand 的观点,即您应该有一个登录模型并按角色分隔它们。

    但这取决于你,有办法通过使用方法来做到这一点:

    def current_user
      current_seller || current_buyer
    end
    

    这将返回 sellerbuyernil

    【讨论】:

    • 我也开始这么想了。与 OmniAuth 集成也被证明是一种痛苦,因为据我所知,它已经假设了一个模型,而且我的解决方法有点“meh”。现在我正在尝试使用 User 的两个子类来定义默认角色,而不必求助于批量分配。
    • 为什么不只保留卖家和买家,而是将登录帐户分开?所以卖家和买家都有_一个 login_account 和一个 login_account 属于_卖家或买家(当然是多态的)。
    • 我最初试图做类似的事情。使用名为users 的表进行身份验证,然后在我的迁移t.references :actual_user, :polymorphic => true 中使用:actual_user 是买方或卖方对象。我只是在弄清楚如何确定范围时遇到了麻烦,以便当我去卖家/sign_up 或买家/sign_up 时,它知道将 :actual_user 设置为什么。
    【解决方案2】:

    拥有两个用户模型可能会使您的设计变得比必要的复杂。您可能需要考虑使用一种用户模型进行身份验证。然后,如果需要,您可以为买家和卖家担任角色。

    但如果你真的只是想为 ApplicationController 中的方法设置别名,你可以这样做:

      private
      alias :current_user :current_seller
    

    或者,如果您需要更动态的东西,您可以使用一种方法。

    【讨论】:

    • 我相信 alias_method 比 alias 更可取,因为 alias_method 允许您稍后更改别名。
    猜你喜欢
    • 2021-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多