Mongoid中具有belongs_to关联的嵌入式文档

时间:2013-07-29 22:50:16

标签: ruby-on-rails mongodb mongoid

我有像波纹管一样的模特。我想通过访客列表查询具有不同类型状态的用户的事件。如果没有错,客人名单应该嵌入事件中?如果我的模型设计错误,我会打开不同的解决方案。

class User
  include Mongoid::Document

end

class Events
  include Mongoid::Document

  embeds_many :guests
end

Class Guests
  include Mongoid::Document

  embed_in :event
  belongs_to :user

  field :status

end

2 个答案:

答案 0 :(得分:2)

我相信模型结构会起作用。

以下是一个示例查询,用于获取具有“等待”状态的访客的所有事件:

Events.where('guests.status' => 'waiting')

这是另一个例子,给定一个事件,让所有事件的客人处于“等待”状态:

event = Events.first # get the desired event
event.guests.where(:status => 'waiting')

最后,您应该为模型命名单数名称(User,Event,Guest)。此外,您的访客模型有一些我在下面修正的拼写错误:

class User
  include Mongoid::Document

end

class Event
  include Mongoid::Document

  embeds_many :guests
end

class Guest
  include Mongoid::Document

  embedded_in :event
  belongs_to :user

  field :status
end

答案 1 :(得分:2)

模型结构错误,因为在Mongo中,您只将信息保存在仅在父文档中需要的嵌入文档中。

如果在客人中您只有状态字段,那么您可以尝试这一点,例如,存在或不存在两种状态类型

class User
  include Mongoid::Document
  has_and_belongs_to_belongs_to :event, :inverse_of => "present_guests"
  has_and_belongs_to_belongs_to :event, :inverse_of => "not_present_guests"
end

class Event
  include Mongoid::Document
  has_and_belongs_to_many :present_guests, :class_name => "User", :inverse_of => "present_guests"
  has_and_belongs_to_has_many :not_present_guests, :class_name => "User", :inverse_of => "not_present_guests"
end

然后您可以使用类似

的状态进行查询
Event.first.present_guests