2

誰かが私が以下のシナリオをモデル化するのを手伝ってくれるかどうか疑問に思いました。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

ユーザーの「管理者」をプルアップできる必要があります(私がいる間、誰もが「管理者」よりも良い名前を持っています。。。。。?)。また、イベントのすべての管理者をプルアップできる必要があります。これほど多くの繰り返しの関係なしにこれを表現するためのよりクリーンな方法は何でしょうか?

4

2 に答える 2

0

モンゴイドのドキュメント:

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クラスなどを作成し、このクラスVenueEvent継承します。

ドキュメントはすべてコレクションに保存されますAdministrable.collection_name。これは「管理可能」である必要があります。

ユーザーは多くの管理者を持ち、所属しています。正しいビューを表示するには、タイプを確認するだけです。

于 2015-01-04T11:49:40.887 に答える