2013-10-13 79 views
0

例如,假設我有兩個型號:ParentChild查找對象

parent.rb

has_many :children 

child.rb

belongs_to :parent 

我想找到所有的父母,其中任一parent.children.last.gender == "boy"parent.volunteer == "yes"

在此先感謝。

回答

0

你必須有「最後一個孩子是男孩」還是「有一個孩子是男孩」的工作? 這將工作後:

Parent.includes(:child).where("children.gender = 'boy' or parents.volunteer = 'yes'") 

對於最後一個孩子是男孩: 下面是你需要在SQL的東西,你也許可以使用find_by_sql得到它的工作或使用Rails語法創建類似的東西等同或阿雷爾。

select p.* from parents p inner join 
(select parent_id, gender from children where id in (select max(id) from children group by parent_id)) c 
on c.parent_id = p.id where p.volunteer = 'Yes' OR c.gender = 'Boy'; 

根據數據庫的大小,此查詢可能會運行相當昂貴,替代的解決方案可能是最後一個孩子的性別存儲在父記錄,並更新它的每一個,如果它是一個不同的新的孩子加入時間目前父母的性別。

+0

不幸的是,我需要「最後一個孩子是一個男孩」。這就是爲什麼我要做這樣的決定。 – David

+0

沒問題,這只是一個醜陋的查詢仍然可能。 – iouri

+0

你是什麼醜陋的查詢可能是? – David