mongoid中多态habtm的解决方法?

时间:2013-02-26 18:51:22

标签: polymorphism mongoid has-and-belongs-to-many

我想知道是否有人可以帮我模拟下面的情景。我在Mongoid中有一个User类,一个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

我需要能够提升用户的“管理员”(当我在这里时,任何人都有比“管理员”更好的名字......?)以及拉出所有管理员的活动。没有那么多重复的关系,什么是更清洁的方式来表示这一点?

2 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:0)

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

创建一个类Administrable或类似的东西,然后VenueEvent继承此类。

这些文件将全部存储在集合Administrable.collection_name中,该集合应为'administrables'。

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