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従業員にマネージャーが必要な場合、この設定でそれは可能ですか? マネージャーの役​​割を持つユーザーが、のようなマネージャー固有の属性を持つことは可能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

マネージャーであるすべてのユーザーは、マネージャー テーブルに user_id = user.id のレコードを持ちます。Employee であるすべてのユーザーは、Employee テーブルに user_id = user.id および manager_id = (対応するマネージャー レコードの ID) を持つレコードを持ちます。

于 2012-09-12T04:31:31.180 に答える