2011-04-14 80 views
3

假設我在HABTM環境中有兩個獨立的模型User和Event。構建Mongoid中的複雜關係

現在我想擴展它以包含有關關係的信息。事情就像用戶計劃參加活動一樣。

在標準的ActiveRecord中,這將通過has_many:through關係來完成,但是從我一直在閱讀的內容來看,嘗試在mongoid中創建這種關係是一個壞主意。解決這個問題的好方法是什麼? (與蒙戈住)

這裏是我期望這種類型的功能的示例:

class User 
    field :name 
    has_many :user_events 
    has_many :events, :through => :user_events 
end 

class Event 
    field :title 
    has_many :user_events 
    has_many :users, :through => :user_events 
end 

class UserEvent 
    field :attending?, :type => Boolean 
    belongs_to :users 
    belongs_to :events 
end 

回答

3
class User 
    include Mongoid::Document 

    field :name 
    embeds_many :user_events 
end 

class UserEvent 
    include Mongoid::Document 

    belongs_to :event 
    embedded_in :user 

    field :attending?, :type => Boolean 
end 

class Event 
    include Mongoid::Document 
    field :title 
end 

爲了找到的所有事件,其中用戶正關注:

user = User.where(:name => 'Joe').first 
user.user_events.where(:attending? => true) 

有關完整的示例,請參閱此gist

+0

這與我很薄國王也是。然後在用戶中加入一個包裝方法,例如get_events()來抽象該user.user_events.events查詢。我希望有這種類型的關係發展的最佳做法。 – agentargo 2011-04-14 14:53:36

+1

的確,您可能還想看看http://www.mongodb.org/display/DOCS/Schema+Design。重要的一點是:「訂單項明細對象通常是嵌入式的。」。希望有所幫助。 – Matt 2011-04-17 11:33:05