【问题标题】:Michael Hartl's rails tutorial: reusing sessions resource for multiple User typesMichael Hartl 的 rails 教程:为多种用户类型重用会话资源
【发布时间】:2012-06-04 03:35:30
【问题描述】:

我正在通过 Micheal Hartl 的 tutorial 学习 Ruby on Rails。

在我的 Web 应用程序中,我需要两种类型的用户,称为发布者和订阅者。目前我有一个发布者资源和一个订阅者资源。我希望他们都能够使用会话资源进行登录/注销。

我正在寻找有关如何实现这一点的方向。我的发布者和订阅者资源是否应该从 User 资源继承,例如,以下代码通过多态工作?

def create
  user = User.find_by_email(params[:session][:email])
  if user && user.authenticate(params[:session][:password])
    # Sign the user in and redirect to the user's show page.
  else
    # Create an error message and re-render the signin form.
  end
end

发布者和订阅者没有很多共同的字段和不同的能力,所以我认为应该将它们建模为两个独立的资源,但是如何让它们共享Sessions资源呢?

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    一种可能的解决方案是使 User 类仅用于登录,并且用户将通过多态关联属于发布者或订阅者,如下所示:

    class User < ActiveRecord::Base
      belongs_to :identifiable, :polymorphic => true
    end
    

    如果你不知道什么是多态关联,you should read this tutorial。

    这段代码会这样使用:

    subscriber = Subscriber.find(1)
    user = User.new
    user.identifiable = subscriber
    user.save
    

    因此,您的 Subscriber 或 Publisher 将与一个用户相关联, :identifiable 字段是与另一个对象的关系(多态关系)。 p>

    有了这个,用户可以使用这个可识别的关联作为 订阅者 或 发布者,并且您的 SessionsController 将被他们重用(以及所有的身份验证逻辑,因为它会存在于 User 而不是这些其他类)。

    【讨论】:

    • 谢谢。这些可能是非常新手的后续问题,请多多包涵。 (1) “可识别”是什么意思? :identifiable 是 Rails 中的关键字吗(找不到任何文档)。 (2) 以用户身份登录后,我将如何“移交”给适当的发布者或订阅者控制器?
    • 这是发布者和订阅者声明中的正确关联吗? belongs_to :user, :as =&gt; :identifiable
    • 没错。这样您就可以为两者重用用户模型。
    猜你喜欢
    • 1970-01-01
    • 2014-04-11
    • 2016-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多