Структурирование сложных отношений в монгоиде - PullRequest
3 голосов
/ 14 апреля 2011

Скажем, у меня есть две отдельные модели: Пользователь и Событие в среде HABTM.

Теперь я хочу расширить это, чтобы включить информацию об отношении. Такие вещи, как, если пользователь планирует посетить событие.

В стандартном 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

1 Ответ

3 голосов
/ 14 апреля 2011
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

...