2012-12-03 26 views
0

我有一个User模型与相关EnrollmentInformation模型:如何与轨道上相关的模型查询和mongoid

class User 
    include Mongoid::Document 
    has_one :enrollment_information 
end 

class EnrollmentInformation 
    include Mongoid::Document 
    belongs_to :user 
    field :type_one, :type => Boolean 
end 

我想找到的所有用户,其中EnrollmentInformationtype_one字段的值是true。

我已经尝试了几个变化没有成功。有谁知道我可以如何做这个查询?

User.includes(:enrollment_information).where(:"enrollment_information.type_one" => true) 

编辑:

更新查询

回答

1

在这种情况下,我会考虑嵌入EnrollmentInformation文档的用户里面,而不是建立一个关系。特别是因为它无论如何都是一个关系。这样,你可以这样做:

User.where(:"enrollment_information.type_one" => true) 

下面是嵌入一个文档的文档:http://mongoid.org/en/mongoid/docs/relations.html#embeds_one

作为一个方面说明,当你有,那说明你还获取了相关文件。如果您启用了标识映射,它也将被缓存在那里。 where子句只能对用户对象的属性进行操作,因此,如果使用嵌入式,您将能够访问嵌入的属性。

+0

谢谢,我实际上已经试过“enrollment_information.type_one”为好。已经有不少用户,所以我会讨论将enrollment_information嵌入用户与其他开发者,并看看他们的想法。我对Mongo并不是很熟悉:嵌入一个现有的文档是一个微不足道的改变(看起来它不会)? –

+0

不知道数据库的复杂性/大小,您可以设置一个rake任务来遍历每个注册信息文档,并在用户上设置嵌入式版本。 – stantona

+1

但如果你想列出所有的注册信息,那么你必须遍历所有的用户文件,当你使用嵌入式文件,而那不是关系的情况下... – abhas

1

如果您没有问题得到一个数组的回报,这应该工作 -

User.find(EnrollmentInformation.where(:type_one => true).collect{|enrollmentinformation| 
    enrollmentinformation.user_id})