我不是這個架構設計(建議表示歡迎)非常有信心,但我有兩個集合:如何鏈接到MongoMapper中的EmbeddedDocument?
- 業務
- 客戶
和他們每個人的包含嵌入的文件:
- 業務包含事件
- 客戶包含註冊
類的定義如下,但首先是問題。當我創建一個商業並添加一個事件時,一切都很正常。當我創建一個客戶並添加註冊時,一切都很正常。在這一點上,我可以這樣做:
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
?我想要的是Event和它的許多註冊(這些註冊都屬於客戶)。這種模式可能嗎?
這就是我的模特的樣子。他們都有額外的(不相關的)鍵不顯示:
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
謝謝!這有助於噸...有沒有辦法鏈接到嵌入式文檔呢?可能通過對嵌入式文檔ID進行索引,然後在Event中存儲一個ObjectId數組? – colllin