Rails:两个模型之间的两种不同的多对多关系

普拉巴卡

我有两个名为books (id, name, author_name)和的users (id, name, location)书籍可以由用户查看或由用户编辑。因此,对于这两个关系,我有两个联接表。book_editor_users (book_id, user_id)book_viewer_users (book_id, user_id)如何在Rails中对此建模,以便我可以像这样检索编辑器用户和查看器用户:

Book.find(1).book_editor_users
Book.find(1).book_viewer_users

我对本书和用户模型的尝试是:

class Book < ActiveRecord::Bas
  has_many :book_editor_users
  has_many :users, through: :book_editor_users
  has_many :book_viewer_users
  has_many :users, through: :book_viewer_users # I am confused on how to setup this line
end

class User < ActiveRecord::Base
  has_many :books, through: :book_editor_users
  has_many :books, through: :book_viewer_users # I am confused here too
end

我编写的联接模型是:

class BookEditorUser < ActiveRecord::Base
  belongs_to :book
  belongs_to :user
end

class BookViewerUser < ActiveRecord::Base
  belongs_to :book
  belongs_to :user
end

我想到了另一种解决方法,但是我不确定这是否是Rails方式。解决方法是只有一个联接表book_users (book_id, user_id, type),在该中,type列可以捕获是编辑器关系还是查看器关系。

阿布巴卡

单个联接表(books_users)是在其中具有权限列的最佳方法。假设对于视图2来说,带有1的整数列对于edit(如果可能的话,对于两个都是3)。为了获得编辑者或查看者用户,您应该在其加入模型中写入范围(BooksUsers)

scope :viewers, -> { where(permission: 1) }
scope :editors, -> { where(permission: 2) }

现在您可以从这些范围中找到特定用户的书籍

Book.find(1).books_users.viewers
Book.find(1).books_users.editors

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

DDD:两个不同集合之间的多对多关系

来自分类Dev

两个不同数据库中两个表之间的多对多关系

来自分类Dev

Symfony2学说-两个相同实体之间的两种不同关系?

来自分类Dev

Ruby on Rails:两种模型之间的关系

来自分类Dev

Rails:在命名空间中的两个模型之间创建多对多关系,我需要做什么?

来自分类Dev

在两个多对多关系之间选择

来自分类Dev

在两个多对多关系之间选择

来自分类Dev

Rails:两个模型之间的多重关系

来自分类Dev

mongoid 模型与另一个模型有两种关系 - rails mongodb

来自分类Dev

当两个类之间具有多个不同的(一对多,多对多)关系时,如何注释模型类

来自分类Dev

定义具有多对多关系的两个实体之间的关系

来自分类Dev

两个模型之间有不同的关联Rails

来自分类Dev

如何在Django中以双向多对多关系从两个模型中获取数据

来自分类Dev

如何使用 InlinePanel 以多对多关系链接 wagtail 中的两个页面模型

来自分类Dev

Django,在两个表中使用预定义值在两个表之间分配多对多关系

来自分类Dev

ER建模-绘制两个属性之间的多对多关系图

来自分类Dev

MariaDB - 在两个实体之间创建多对多关系表

来自分类Dev

如何在Rails中合并具有一对多关系的两个模型?

来自分类Dev

Rails-如何以多对多关系链接两个现有记录?

来自分类Dev

实体框架-渴望加载两个多对多关系

来自分类Dev

一张桌子的两个多对多关系

来自分类Dev

约束两个递归多对多关系

来自分类Dev

约束两个递归多对多关系

来自分类Dev

两个相似的多对多关系

来自分类Dev

多对多关系的两个以上的表

来自分类Dev

Laravel雄辩:一对一和一对多两种模型之间的多重关系

来自分类Dev

休眠-两个类之间的多个多对多关联

来自分类Dev

如何删除两个实体之间的多对多关联?

来自分类Dev

如何首先在代码中定义两个实体之间的多对多和一对多关系?

Related 相关文章

  1. 1

    DDD:两个不同集合之间的多对多关系

  2. 2

    两个不同数据库中两个表之间的多对多关系

  3. 3

    Symfony2学说-两个相同实体之间的两种不同关系?

  4. 4

    Ruby on Rails:两种模型之间的关系

  5. 5

    Rails:在命名空间中的两个模型之间创建多对多关系,我需要做什么?

  6. 6

    在两个多对多关系之间选择

  7. 7

    在两个多对多关系之间选择

  8. 8

    Rails:两个模型之间的多重关系

  9. 9

    mongoid 模型与另一个模型有两种关系 - rails mongodb

  10. 10

    当两个类之间具有多个不同的(一对多,多对多)关系时,如何注释模型类

  11. 11

    定义具有多对多关系的两个实体之间的关系

  12. 12

    两个模型之间有不同的关联Rails

  13. 13

    如何在Django中以双向多对多关系从两个模型中获取数据

  14. 14

    如何使用 InlinePanel 以多对多关系链接 wagtail 中的两个页面模型

  15. 15

    Django,在两个表中使用预定义值在两个表之间分配多对多关系

  16. 16

    ER建模-绘制两个属性之间的多对多关系图

  17. 17

    MariaDB - 在两个实体之间创建多对多关系表

  18. 18

    如何在Rails中合并具有一对多关系的两个模型?

  19. 19

    Rails-如何以多对多关系链接两个现有记录?

  20. 20

    实体框架-渴望加载两个多对多关系

  21. 21

    一张桌子的两个多对多关系

  22. 22

    约束两个递归多对多关系

  23. 23

    约束两个递归多对多关系

  24. 24

    两个相似的多对多关系

  25. 25

    多对多关系的两个以上的表

  26. 26

    Laravel雄辩:一对一和一对多两种模型之间的多重关系

  27. 27

    休眠-两个类之间的多个多对多关联

  28. 28

    如何删除两个实体之间的多对多关联?

  29. 29

    如何首先在代码中定义两个实体之间的多对多和一对多关系?

热门标签

归档