如何在rails中使用多态关联管理多个角色?

时间:2015-05-28 07:13:06

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4 polymorphic-associations

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

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

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

我想找到一种方法来更改上面的字段,如果用户以&#39;教师&#39;及其ID。

1 个答案:

答案 0 :(得分:2)

您可以添加多态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