Jak dołączyć do mutli-role, wielu tabel organizacji w Railsach

Próbuję znaleźć rozwiązanie do projektowania szyn, które nie jest dla mnie takie oczywiste. Przyjaciel, który jest bardzo dobry z tymi rzeczami, dał mi swój pogląd na ten temat, ale zastanawiałem się, czy istnieje wzór szyny - wiedza, której brakuje, to sposób, w jaki szyny tworzą relacje…

Mam taką przestrzeń problemową. Użytkownicy mogą pełnić więcej niż jedną rolę w więcej niż jednej organizacji. Na przykład użytkownik może być zarówno „użytkownikiem standardowym”, jak i „użytkownikiem zaawansowanym” w organizacji 1, ale „administratorem” w organizacji 2.

Używam Devise i CanCan. Mam tabelę Users, Role i tabelę Organizations oraz tabelę roles_users do zarządzania relacją wiele-do-wielu. Następnie mam tabelę organizacji użytkownika, która przechowuje M2M między użytkownikiem a organizacjami. To wszystko działa dobrze. Kiedy to robię;

user = User.new({ :email => '[email protected]', 
:password => 'password', 
:password_confirmation => 'password', 
:firstname => 'TestFirstName',
:surname => 'TestSurName'})

org1 = Org.new({:fullname => 'Test Org 1'})
org1.save

org2 = Org.new({:fullname => 'Test Org 2'})
org2.save

user.org << Org.first
user.org << Org.last

user.roles << Role.where('name'=>'administrator').first
user.roles << Role.where('name'=>'PowerUser').first

Dostaję (jak można się spodziewać) dwa orgy, a użytkownik zarejestrowany w obu.

Brakującym elementem są role. Mam nowy model (przy użyciu przypisania), roles_user_orgs, który ma być łącznikiem między tabelą user_org a rolami i przechowywać rolę dla użytkownika przy użyciu klucza podstawowego użytkownika i identyfikatora ról. Ale nigdy nie jest zaludniony. Nie wiem, czy to dlatego, że nie piszę poprawnie wstawki, aby ją wypełnić, czy dlatego, że moje relacje nie są poprawne - lub - ponieważ projekt jest błędny i nie działa w szynach. Prostszym modelem jest użycie org_id w tabeli user_roles, ale nie wiem, jak to wypełnić ……

Oto moje skojarzenia ...

class Role

has_many :user_roles, :dependent => :destroy
has_many :users, :through => :user_roles, :uniq => true

has_many :role_user_orgs, :dependent => :destroy
has_many :user_orgs, :through => :role_user_orgs


class Org
has_many :user_orgs
has_many :users, :through => :user_orgs

class UserOrg
belongs_to :org
belongs_to :user

has_many :role_user_orgs, :dependent => :destroy
has_many :roles, :through => :role_user_orgs

class UserRole
belongs_to :User
belongs_to :role

class User
has_many :user_roles
has_many :roles, :through => :user_roles
has_many :user_orgs
has_many :orgs, :through => :user_orgs


class RoleUserOrg
belongs_to :role
belongs_to :user_orgs

questionAnswers(1)

yourAnswerToTheQuestion