【问题标题】:How to deal with many-to many relation between 3 tables如何处理3个表之间的多对多关系
【发布时间】:2014-07-01 13:19:59
【问题描述】:

我这里有个问题,我不知道如何处理多对多关系中关联 3 个表的关系

我有 3 个模型(组件、组、权限)

多个组件的组授权,组件可能被多个组授权

权限可以分配给很多组,组有很多权限

所以每个(组件,组)和权限之间应该存在一对多的关系 使一个组对一个组件拥有一个权限

所以我构造了一个 components_groups_permissions 表 {component_id,group_id,permission_id}

组件模型

     has_many :groups, through: :components_groups_permissions
     has_many :permissions, through: :components_groups_permissions
     has_many :components_groups_permissions

组模型

     has_many :components, through: :components_groups_permissions
     has_many :permissions, through: :components_groups_permissions
     has_many :components_groups_permissions

权限模型

     has_many :components, through: :components_groups_permissions
     has_many :groups, through: :components_groups_permissions
     has_many :components_groups_permissions

ComponentsGroupsPermission 模型

     belongs_to :component
     belongs_to :group
     belongs_to :permission

如何通过这个关系添加记录或检索记录

编辑: 我的组件如目录 allow_to_rename、allow_to_delete 等权限

【问题讨论】:

  • 您要从哪个表中检索项目?
  • 我需要从关系中检索项目以回答诸如 groupA 对 componentA 的权限是什么等问题
  • @Mostafa 您的组件没有多大意义您需要提供有关如何使用这些模型的更多信息
  • @Babar 请阅读我的编辑
  • 通过控制台最简单的方法是你这样做entry=ComponentsGroupsPermissionentry.component_id= (id of a component)entry.group_id= (id of a group)entry.permission_id= (id of a permission)entry.save

标签: ruby-on-rails ruby activerecord ruby-on-rails-4 has-many-through


【解决方案1】:

假设您要查找属于“特定组件”的所有componentsgroupspermissions。以下是您将如何查询它:

Component.find(:id).componentsgroupspermissions

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-17
    • 2011-08-25
    相关资源
    最近更新 更多