2

我有像下面这样的模型。我想通过来宾“列表”查询具有不同状态的用户的事件。如果没记错的话,客人名单应该嵌入到活动中吗?如果我的模型设计错误,我愿意接受不同的解决方案。

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
4

2 回答 2

2

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

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

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

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

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

最后,您应该为模型命名为单数名称(用户、事件、访客)。此外,您的 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
于 2013-07-30T00:53:22.720 回答
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
于 2013-07-30T06:33:09.790 回答