Rails在has_many关系中迭代对象

时间:2013-12-29 14:33:40

标签: ruby-on-rails ruby object mongoid

我有两个模型:

  

家庭 - > has_many:人

     

人 - > belongs_to:family

我想从结果中查询Family' and again query the人物`。对于前

@families=Family.all
@families=@families.where(........#queries.......)
@results=[]
@families.each do |family|
   @persons=family.persons
   @persons=@persons.where(.........#queries.........)
   @results << @persons
end
@results.flatten!               #because this will be an array of arrays.  

最后,我只想让所有满足FamilyPerson查询的

但这对两个查询都不起作用。它既适用于Person,也适用于Family,但不适用于{{1}}。

这里有什么问题?

我正在关注 111-advanced-search-form-revised railscast,但是要搜索has_many关系。

我正在使用Mongoid和Rails 3。

编辑:我写的内容似乎是正确的。还有另一种更优雅的方法吗?

2 个答案:

答案 0 :(得分:1)

试试这个:

@families = Family.where(........#queries.......)
@results = []
@families.each do |family|
   @persons = family.persons.where(.........#queries.........)
   @results = @result.concat(@persons)
end

注意:您不需要@results.flatten!,因为@result.concat(@persons)合并了数组。

编辑:

你也可以这样做,结果与@Finbarr的好查询相同:

@persons = Person.where({ ***your query***, :family_id.in => Family.where({ *** query***}).pluck(:id)})

答案 1 :(得分:0)

如果您真正想要的是人物,我会建议这样的事情:

Person.where(.....#queries.....).where("family_id IN (SELECT id FROM families WHERE <family queries>)")

这将使您的所有人在1个查询中。