具有Mongoid和Devise的“Parent”和“Child”用户

时间:2011-12-25 05:58:14

标签: ruby-on-rails-3 mongodb ruby-on-rails-3.1 devise mongoid

首先,祝圣诞快乐!我一直想做的事情很简单(理论上)。我有一个与Mongoid一起运行的Devise身份验证系统,因为它是ODM。我想要做的是将某些用户与另一个用户关联,其中一个用户是其他“子”用户的“父”。想想父母控制 - 有一个父母有一个帐户,然后他们所有的孩子都与父帐户相关联。然后,父帐户具有特殊的“父”角色,该角色赋予他们对其子女的父母控制权(或管理权)。同样的概念在这里我只是试图在设计中使用Mongoid作为ODM来模拟这个。 Can Can将在以后用于授权。

我想到的第一个解决方案是将孩子嵌入父帐户。我不想用嵌入来解决这个问题,因为我没有看到它的好处。 如果有人可以通过嵌入来解决这个问题的好处,请做。我正在考虑使用类似has_many :users的东西。如果这可能成为一个问题,用户真的可以在Devise + Mongoid中拥有很多用户吗?

我正在考虑的另一件事是让父模型和学生模型继承自User模型(包含Devise的模型)。考虑到我将继承Devise模型,我不知道这是否适用于Devise 1.x(以及将来的2.x)。 如果你之前尝试过,请告诉我你的经历。

做了那个冗长的解释,你的想法?

-Robert

使用Rails 3.1.x,Devise 1.5.x和Mongoid 2.3.x

1 个答案:

答案 0 :(得分:1)

您可以使用STI(单表继承),它可以提供单独的图层来区分用户的两个图标。

您可以按照以下方式执行此操作(根据ActiveRecord进行说明..您可以根据需要进行解释):

class User < ActiveRecord::Base
end

class ParentUser < User
end

class ChildUser < User
end

为此,您必须在用户模型中添加type列。

因此,无论何时您想创建ParentUser,都可以 parent_user = ParentUser.create()

以及创建子用户

child_user = ChildUser.create()

更详细的博客文章http://rohitsharma9889.wordpress.com/2010/11/29/implement-sti-single-table-inheritance-in-your-rails-models/

您也可以在Rails devise registration form when having STI

中提及此问题