Rails 4中多个Devise登录模块的通用登录

时间:2014-12-15 09:33:22

标签: ruby-on-rails ruby login devise

在我的应用中,我有不同类型的用户/模型,通过devise gem进行配置以进行注册。让我让你更清楚。

  • Doctor's 登录我有这条路径http://localhost:3000/doctor/sign_in
  • 对于医院登录我有这条路径http://localhost:3000/hospital/sign_in
  • 对于用户登录我有这条路径http://localhost:3000/user/sign_in

因为所有这些都有自己的数据库表,如doctorshospitalsusers,其中所有细节都分别保存。

现在我想知道的是,这可能有单一登录页面,并且我使用已注册的doctor's id登录,那么它应该将我重定向到Doctors页面,如果我使用hospital's id登录然后它应该将我重定向到hospitals页面,依此类推..这有可能实现吗?如果是,那么请你指导我正确的方向我应该做什么?

注意:我知道管理roles/user_types但我不能这样做,因为医生,医院和用户需要不同的信息。

2 个答案:

答案 0 :(得分:4)

您可以使用Single Table Inheritance

class AuthUser < ActiveRecord::Base; end
class Doctor < AuthUser; end
class Hospital < AuthUser; end
class User < AuthUser; end

并使用设计用于AuthUser。

关于登录路径后,您可以自定义after_sign_in_path_forSample

答案 1 :(得分:1)

我认为应该只有一个用于保存用户,即users。您可以创建一个名为user_types的表,其中包含用户类型名称,即医生,医院和用户。用户属于用户类型。它看起来像这样

class User
  belongs_to :user_type
end

class UserType
  has_many :users
end

然后在应用程序控制器中,您可以覆盖设计的after_sign_in_path_for方法,并根据用户类型将用户重定向到该页面。

希望这是有道理的!

如果无法做到这一点,那么您可以为Doctor,User和Hospital添加三个单选按钮,用户必须在签名前选择登录类型和凭据。根据所选单选按钮的值处理后端登录。