Я не очень уверен в этом дизайне схемы (предложения приветствуются), но у меня есть две коллекции:
и каждый из них содержит вложенные документы:
- предприятия содержат события
- Клиенты содержат регистрации
Определения классов приведены ниже, но сначала вопрос. Когда я создаю Бизнес и добавляю Событие, все выглядит хорошо. Когда я создаю Заказчика и добавляю Регистрацию, все выглядит хорошо. На данный момент я могу сделать:
ruby-1.9.2-p180 :380 > customer1.registrations.first.customer
=> #<Customer _id: BSON::ObjectId('4eb22a5bbae7a01331000019'), business_id: BSON::ObjectId('4eb215a9bae7a01331000001'), registrations: nil>
Отлично! Но потом ... Я добавляю Регистрацию к Событию, используя event1.registrations << registration1
, и теперь event1
имеет другую ссылку customer
в зависимости от того, получаю ли я доступ к ней через Событие или через Клиента:
ruby-1.9.2-p180 :444 > customer1.registrations.first.customer
=> #<Customer _id: BSON::ObjectId('4eb22a5bbae7a01331000019'), business_id: BSON::ObjectId('4eb215a9bae7a01331000001'), posts: nil>
ruby-1.9.2-p180 :445 > business1.events.first.registrations.first.customer
=> #<Event _id: BSON::ObjectId('4eb21ab2bae7a0133100000f'), business_id: BSON::ObjectId('4eb215a9bae7a01331000001'), posts: nil>
ruby-1.9.2-p180 :446 > business1.events.first.registrations.first == customer1.registrations.first
=> true
Не идеально ... я думаю, что дубликаты registration1
были встроены в customer1
и event1
? То, что я хотел, было связями между Событием и его многочисленными Регистрациями (которые принадлежат и встроены в Клиентов). Возможно ли это с помощью этой схемы?
Вот так выглядят мои модели. Все они имеют дополнительные (и неактуальные) клавиши, которые не отображаются:
class Business
include MongoMapper::Document
many :events
many :customers
end
class Event
include MongoMapper::EmbeddedDocument
embedded_in :business
many :registrations
end
class Customer
include MongoMapper::Document
belongs_to :business
key :business_id, ObjectId
many :registrations
end
class Registration
include MongoMapper::EmbeddedDocument
embedded_in :customer
belongs_to :event
key :event_id, ObjectId
end