Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Mongoid中具有“属于”关联的嵌入文档_Ruby On Rails_Mongodb_Mongoid - Fatal编程技术网

Ruby on rails Mongoid中具有“属于”关联的嵌入文档

Ruby on rails Mongoid中具有“属于”关联的嵌入文档,ruby-on-rails,mongodb,mongoid,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

我有贝娄这样的模特。我想按来宾列表查询不同状态用户的事件。如果我没有错,活动中是否应嵌入客人名单?如果我的模型设计是错误的,我愿意接受不同的解决方案

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

我相信模型结构会起作用

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

Events.where('guests.status' => 'waiting')
event = Events.first # get the desired event
event.guests.where(:status => 'waiting')
下面是另一个示例,在给定活动的情况下,让该活动的所有来宾都处于“等待”状态:

Events.where('guests.status' => 'waiting')
event = Events.first # get the desired event
event.guests.where(:status => 'waiting')
最后,您应该将模型命名为单数名称(用户、事件、来宾)。此外,您的来宾模型有一些拼写错误,我在下面修复:

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

我相信模型结构会起作用

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

Events.where('guests.status' => 'waiting')
event = Events.first # get the desired event
event.guests.where(:status => 'waiting')
下面是另一个示例,在给定活动的情况下,让该活动的所有来宾都处于“等待”状态:

Events.where('guests.status' => 'waiting')
event = Events.first # get the desired event
event.guests.where(:status => 'waiting')
最后,您应该将模型命名为单数名称(用户、事件、来宾)。此外,您的来宾模型有一些拼写错误,我在下面修复:

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

模型结构错误,因为在
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

模型结构错误,因为在
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

那么你应该听从@abhas的建议。使用上面的模型结构,最接近的是
my\u events=Event.where('guests.user\u id'=>my\u user\u id)
,它将获得您的用户作为来宾的每个事件。然后,您必须迭代该结果列表,并找到具有所需状态的结果列表:
my_events.select{e|e.guests.where(:user_id=>my_user_id,:status=>'waiting')。first}
。这远远不是最优的,所以您应该使用不同的模型方案。感谢您的帮助和解释。致以最良好的祝愿。那么你应该听从@abhas的建议。使用上面的模型结构,最接近的是
my\u events=Event.where('guests.user\u id'=>my\u user\u id)
,它将获得您的用户作为来宾的每个事件。然后,您必须迭代该结果列表,并找到具有所需状态的结果列表:
my_events.select{e|e.guests.where(:user_id=>my_user_id,:status=>'waiting')。first}
。这远远不是最优的,所以您应该使用不同的模型方案。感谢您的帮助和解释。顺致敬意,