由于项目需要高度可配置的权限,我有一个复杂的关联嵌套。模型亮点是
class User < ActiveRecord::Base
has_one :group_membership
has_one :group, through: :group_membership
has_one :group_permission, through: :group, source: :group_permissions
enum role: [:group_leader, :user]
end
class Group < ActiveRecord::Base
has_many :group_memberships
has_many :users, through: :group_memberships
has_many :group_permissions
end
class GroupPermission < ActiveRecord::Base
belongs_to :group
end
class GroupMembership < ActiveRecord::Base
belongs_to :group
belongs_to :user
end
GroupPermission
group_id
有一个role
,一个allowed_actions
和一个role
。
因此,对于每个Group
,可能有多个group_permissions
具有不同的allowed_actions
,具体取决于role
我希望能够说出@user.group_permission
并将group_permission
范围归结为@users
role
,但我不确定如果只通过协会就可以实现
更新
我想另一种问这个问题的方法是,如果我在User
上定义一个方法,例如
def group_permissions
group.group_permissions.where(role: role)
end
这为我提供了此用户的正确group_permissions
记录。我希望能够通过协会来做到这一点,而且我不确定这是否可能