Je voudrais savoir s'il existe une façon plus élégante de chaîner has_many à travers les relations. Dans mon exemple, j'ai un utilisateur qui peut avoir plusieurs rôles. Chaque rôle a plusieurs autorisations. Un utilisateur a donc plusieurs autorisations. Le code ci-dessous fonctionne bien, mais je me demande s'il existe une meilleure façon de le faire.Chaîne has_many: par le biais des associations
class User < ActiveRecord::Base
has_many :role_user_mappings
has_many :roles, through: :role_user_mappings
def permissions
permitted_actions = []
self.roles.each do |role|
role.permissions.each do |permission|
permitted_actions << permission
end
end
permitted_actions
end
end
class Role < ActiveRecord::Base
has_many :permission_role_mappings
has_many :permissions, through: :permission_role_mappings
end
class Permission < ActiveRecord::Base
end
class PermissionRoleMapping < ActiveRecord::Base
belongs_to :permission
belongs_to :role
end
class RoleUserMapping < ActiveRecord::Base
belongs_to :user
belongs_to :role
end
Je voudrais pouvoir faire ceci.
user.permissions
EDIT: J'ai essayé Une chose que j'ai essayé au moins Drys le modèle de l'utilisateur un peu ajoute la fonction comme une préoccupation
module Permittable
extend ActiveSupport::Concern
def permissions
permitted_actions = []
self.roles.each do |role|
role.permissions.each do |permission|
permitted_actions << permission
end
end
permitted_actions
end
end