Rails 和 Devise 的 STI

STI with Rails and Devise

我正在 Rails 应用程序上开发 Ruby 并使用设备对用户进行身份验证。

首先,我有这些模型:

class User < ActiveRecord::Base
  devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :lockable
end

class Admin < User
end

class Partner < User
end

我的 devise_for 路线:

devise_for :users, :controllers => {
  :registrations => "registrations",
  :passwords => "passwords"
}

我想做什么?我想为每个模型做一个单独的设计,具有不同的视图和不同的策略,例如:用户使用他的注册号和密码登录,管理员和合作伙伴使用电子邮件和密码登录(我认为管理员和合作伙伴设计可以相同,因为他们的登录策略是相同的)。

最好的方法是什么?

配置路由:

devise_for :users
devise_for :admins
devise_for :partners

生成设计视图

rails generate devise:views user
rails generate devise:views admin
rails generate devise:views partner

别忘了,在用户 table 中为您的 STI 添加类型字段

class AddTypeToUser < ActiveRecord::Migration
  def up
    add_column :users, :type, :string
  end

  def down
    remove_column :users, :type
  end
end