我想知道是否有人可以帮我模拟下面的情景。我在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
我需要能够提升用户的“管理员”(当我在这里时,任何人都有比“管理员”更好的名字......?)以及拉出所有管理员的活动。没有那么多重复的关系,什么是更清洁的方式来表示这一点?
答案 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
或类似的东西,然后Venue
和Event
继承此类。
这些文件将全部存储在集合Administrable.collection_name
中,该集合应为'administrables'。
用户拥有并属于许多管理员,您只需检查类型即可显示正确的视图。