我有两个模型:
家庭 - > 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.
最后,我只想让所有满足Family
和Person
查询的人。
但这对两个查询都不起作用。它既适用于Person
,也适用于Family
,但不适用于{{1}}。
这里有什么问题?
我正在关注 111-advanced-search-form-revised railscast,但是要搜索has_many关系。
我正在使用Mongoid和Rails 3。
编辑:我写的内容似乎是正确的。还有另一种更优雅的方法吗?
答案 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个查询中。