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