3

我正在通过 Micheal Hartl 的教程学习 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 资源呢?

4

1 回答 1

1

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

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

如果您不知道什么是多态关联,您应该阅读本教程

此代码将像这样使用:

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

因此,您的订阅者发布者将与一个用户相关, :identifiable 字段是与另一个对象的关系(多态关系)。

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

于 2012-06-04T04:35:07.237 回答