2

我想知道是否有人可以帮助我为以下场景建模。我在 Mongoid 中有一个 User 类、一个 Event 类和一个 Venue 类。我希望用户成为 Event 或 Venue 或两者兼而有之的管理员。这些不同的角色最终可能会失控,我想知道这是否是多态性的一个好例子。

场地

has_and_belongs_to_many :admins,    :class_name=> 'User', :inverse_of=>:venue_adminships
has_and_belongs_to_many :managers,  :class_name=> 'User', :inverse_of=>:venue_managementships

事件

has_and_belongs_to_many :admins,   :class_name=> 'User', :inverse_of=>:event_adminships
has_and_belongs_to_many :managers,  :class_name=> 'User', :inverse_of=>:event_managementships

用户

has_and_belongs_to_many :venue_adminships,  :class_name=>"Venue",  inverse_of: :admins
has_and_belongs_to_many :venue_managementships, :class_name=>"Venue",  inverse_of: :managers

has_and_belongs_to_many :event_adminships,  :class_name=>"Event",  inverse_of: :admins
has_and_belongs_to_many :event_managementships, :class_name=>"Event",  inverse_of: :managers

我需要能够调出用户的“管理员”(当我在它的时候,任何人都有比“管理员”更好的名字......?)以及调出所有管理员的事件。如果没有这么多重复的关系,有什么更简洁的方式来表示这一点?

4

2 回答 2

0

Mongoid 文档:

Polymorphic behavior is allowed on all relations with the exception of has_and_belongs_to_many.

http://mongoid.org/en/mongoid/docs/relations.html

所以,你不能使用多态来解决这个问题。

于 2013-11-06T09:03:08.757 回答
0

使用继承,所以场地和事件都将存储在同一个集合中。

创建一个类Administrable或类似的东西,然后Venue继承Event这个类。

文档将全部存储在集合中Administrable.collection_name,该集合应该是“可管理的”。

用户拥有并属于许多管理员,您只需检查类型即可显示正确的视图。

于 2015-01-04T11:49:40.887 回答