2011-04-14 9 views
3

HABTM 환경에서 두 개의 개별 모델 사용자 및 이벤트가 있다고 가정 해보십시오.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.user_events.events 쿼리를 추상화하는 래퍼 메서드를 넣습니다. 나는이 유형의 관계가 발전하기위한 모범 사례가 있기를 바랬다. – agentargo

+1

정확하게, http://www.mongodb.org/display/DOCS/Schema+Design을보고 싶을 수도 있습니다. 중요한 점은 "광고 항목 세부 개체가 일반적으로 포함되어 있습니다."입니다. 희망이 도움이됩니다. – Matt

관련 문제