Sto prendendo in considerazione diversi progetti per una gemma generica per la biblioteca di ruolo.
Il primo è basato sulla Rolify gem ma con una relazione has_many through:
invece di HABTM. Le tabelle HABTM sono "senza testa" in ActiveRecord e non possono essere interrogate direttamente, il che è un enorme problema.
class User < ApplicationRecord
has_many :user_roles
has_many :roles, through: :user_roles
end
class UserRole < ApplicationRecord
belongs_to :user
belongs_to :role
end
class Role < ApplicationRecord
has_many :user_roles
has_many :users, through: :user_roles
belongs_to :resource, polymorphic: true
end
Guardandoaquesto,nonriescoavederealcunvantaggioperavereunatabellaseparatarispettoauniredirettamentegliutentiairuoli.
classUser<ApplicationRecordhas_many:rolesendclassRole<ApplicationRecordbelongs_to:userend
Avereunatabellaruoliseparataticonsenteforsedicreareruoli"globali" e quindi associare gli utenti al ruolo.
Ma vale davvero la pena della performance e ha aggiunto la complicazione, lasciando che i ruoli siano unici per utente?