具有设计路径的用户和管理员之间的唯一ID

Dan*_*Dan 5 ruby-on-rails devise

我已经安装了Devise并使用本教程中的选项1创建了用户和管理员https://github.com/plataformatec/devise/wiki/How-To:-Add-an-Admin-role

现在我需要一些帮助.添加管理员时,它会创建一个不同的表,并且可能会出现管理员和普通用户具有相同ID的情况.

那么我究竟如何从用户和管理员那里获取信息呢?比方说,我想显示所有用户?我是否必须遍历users表然后遍历admins表?

或者,如果我正在显示帖子.我如何知道要查找哪个表来获取用户或管理员信息?

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

我希望这有道理哈哈

moh*_*gdy 13

我强烈建议使用单表继承(STI).你可以通过添加一个名为列做STI typestring在数据类型users表,并创建一个admin模型,以及一个normal_user模型,这两种模式都会从继承user的模型devise宝石.

class NormalUser < User
end

class Admin < User
end
Run Code Online (Sandbox Code Playgroud)

type列是保留字,它将保存值NormalUserAdmin根据您创建的用户类型保存值.

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

  • 当然,在users表中,您添加了一个名为type的列,该列是一个字符串数据类型.类型列的值将是Admin或NormalUser(在我们的例子中).当用户登录时,您可以通过在user.rb中添加检查已登录用户类型的方法来获取用户的类型.对于admin定义一个名为admin的方法?正文将是self.is_a?(管理员)如果登录用户是admin,则返回true,否则返回false.对于NormalUser,在user.rb文件中添加一个名为def normal_user的方法?方法的主体将是self.is_a?(NormalUser). (2认同)