我想創建一個使用MongoDB作爲數據庫的事件平臺。我需要Events
和Users
之間的多對多關係。問題是,我希望在那裏有關係中的屬性(例如,Users
可以被確認或未經確認,以用於特定的Event
)。我意識到這將非常適合RDBMS,但我使用MongoDB的原因是我在其他地方佔據優勢,我寧願繼續使用它。模擬has_many:通過與Mongoid
我想爲每個Event
嵌入很多Guests
,它們屬於Users
。這樣,我就可以快速查看哪些用戶正在參加一個活動,只有一個查詢。不過,我也想看看這Events
一個User
迅速出席,所以我想每個User
擁有的Event
ID的數組。
這裏是代碼摘要。
# user of the application
class User
has_many :events
end
# event that users can choose to attend
class Event
embeds_many :guests
has_many :users, :through => :guests # Won't work
end
# guests for an event
class Guest
field :confirmed?, type: Boolean
embedded_in :event
belongs_to :user
end
# Ideal use pattern
u = User.create
e = Event.create
e.guests.create(:user => u, :confirmed => true)
隨着理想的使用模式,e
具有到u
和u
的基準的Guest
具有e
的參考。
我知道has_many :through
線將無法正常工作。有關如何獲得類似功能的任何建議?我想在Guest
使用after_create
回調添加到User
的Event
參考的,但似乎相當哈克。
也許我走錯了路。建議?謝謝。
我剛纔看到你的答案。我發佈瞭如何最終解決我的問題,但使用觀察員會更清潔。謝謝! – cbrauchli
嘿,點頭,鏈接被打破。 –