Как управлять несколькими ролями, используя полиморфную ассоциацию в рельсах?

Я использую устройство для аутентификации и нахожу способ выйти из этого.

Могу ли я исследовать одного и того же пользователя дизайна с несколькими ролями? Чтобы он мог войти в систему как Учитель или Родитель оба? В основном он может переключать учетные записи, как несколько ролей.

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.

1 ответ

Вы можете добавить полиморфный 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
Другие вопросы по тегам