0

我正在开发一个 Rails 应用程序,其中用户可以拥有多个角色,例如经理、员工、管理员等。

由于多个角色,STI 在这种情况下不起作用,但如果可能的话,我仍然希望将与角色相关的数据保存在不同的表中。

所以现在,我的架构看起来像这样:

create_table :roles do |t|
  t.string   :name
  t.timestamps
end

create_table :users do |t|
  t.string :first_name
  t.string :last_name
  t.string :email, :default => "", :null => false
  t.timestamps
end

create_table :roles_users, :id => false do |t|
  t.references :role, :user
end

我的用户/角色模型彼此之间都有has_and_belongs_to_many关系。

因此,例如,如果我需要经理到have_many员工,那么这种设置是否可行?具有 Manager 角色的用户是否可以具有特定于 Manager 的属性,例如secret_manager_information?还是我需要重新考虑我的方法?

4

1 回答 1

1

看到经理需要如何跟踪员工(通常其他角色可能需要跟踪其他特殊数据),我想说每个角色都足够不同,他们应该有自己的表格(假设你没有'角色太多)。

例如,我将创建一个 Manager 和一个 Employee 模型:

class Manager
    attr_accessible :user_id
    has_many :employees
end

class Employee
    attr_accessible :user_id, :manager_id
    belongs_to :manager
end

任何作为 Manager 的用户都将在 Manager 表中具有 user_id = user.id 的记录。任何属于 Employee 的用户都会在 Employee 表中有一条记录,其中 user_id = user.id 和 manager_id =(对应经理记录的 id)

于 2012-09-12T04:31:31.180 回答