ruby-on-rails – 如何使用rails中的多态关联管理多个角色?

我正在使用设计进行身份验证并找到摆脱这种情况的方法.

我可以探索具有多个角色的同一设计用户吗?这样他就可以作为老师或家长登录?基本上他可以像多个角色一样切换账户.

class User < ActiveRecord
  belongs_to :loginable, polymorphic: true
end

class Parent < ActiveRecord
  has_one :user, as: :loginable
end

class Teacher < ActiveRecord
  has_one :user, as: :loginable
end


for eg: loginable_type: "Parent", loginable_id: 123

如果用户以“教师”及其ID登录,我想找到一种方法来更改上述字段.

最佳答案 您可以添加多态has_many关系:

class CreateUserRoles < ActiveRecord::Migration
  def change
    create_table :user_roles do |t|
      t.integer :role_id
      t.integer :user_id
      t.string  :role_type # stores the class of role
      t.timestamps
    end
    add_index :user_roles, [:role_id, :role_type]
  end
end

class AddActiveRoleToUser < ActiveRecord::Migration
  def change
    change_table :user_roles do |t|
      t.integer :active_role_id
      t.timestamps
    end
  end
end

class User < ActiveRecord
   has_many :roles, polymorphic: true
   has_one :active_role, polymorphic: true


   def has_role? role_name
     self.roles.where(role_type: role_name).any?
   end
end
点赞