2012-02-26 52 views
5

我已经安装了设计和创建的用户和管理员也使用选项1从本教程https://github.com/plataformatec/devise/wiki/How-To:-Add-an-Admin-role唯一ID与设计的Rails

现在我需要一点点帮助。添加管理员时,会创建一个不同的表格,并且可能会出现管理员和常规用户可能具有相同ID的情况。

那么我究竟如何获得关于从用户和管理员处获取信息?说例如我想显示所有用户?我是否必须遍历用户表,然后遍历管理表?

或者我正在显示帖子。我如何知道要获取用户或管理信息的表格?

我知道我可以在用户表中添加一个角色列,但我想避免这种情况。

我希望这是有道理的,哈哈

回答

12

我强烈建议使用单表继承(STI)。您可以通过在users表中添加一个名为type的列与string数据类型,并创建admin模型以及normal_user模型,这两个模型都将继承模型的devise gem。

class NormalUser < User 
end 

class Admin < User 
end 

的类型列是保留字,这将根据所创建的用户类型保持的值要么NormalUserAdmin

创建管理使用Admin.create(...)并创建一个普通用户使用NormalUser.create(...),其中点是Admin和属性NormalUser

+0

@ mohammed.magdy真棒,我认为这就是我一直在寻找。你能帮我设置适当的验证码吗?我试图使用Rails_Admin,所以我需要一种方法来验证管理员。 – Dan 2012-02-27 01:10:40

+2

当然,在用户表中,您添加了一个名为type的列,该列是一个字符串数据类型。类型列的值将是Admin或NormalUser(在我们这里是这里)。当用户登录时,您可以通过在user.rb中添加一个用于检查登录用户类型的方法来获取用户的类型。为admin定义一个名为admin的方法? body将是self.is_a?(Admin),如果登录用户是admin,则返回true,否则返回false。 NormalUser相同,在user.rb文件中添加一个名为def normal_user的方法?该方法的主体将是self.is_a?(NormalUser)。 – mohamagdy 2012-02-27 08:50:20

+0

对于身份验证,我建议使用cancan gem,但如果角色不是太多,则该设计将在授权和身份验证中适用于您。 – mohamagdy 2012-02-27 08:51:23