0
例如,假設我有兩個型號:Parent
和Child
查找對象
parent.rb
has_many :children
child.rb
belongs_to :parent
我想找到所有的父母,其中任一parent.children.last.gender == "boy"
或parent.volunteer == "yes"
在此先感謝。
例如,假設我有兩個型號:Parent
和Child
查找對象
parent.rb
has_many :children
child.rb
belongs_to :parent
我想找到所有的父母,其中任一parent.children.last.gender == "boy"
或parent.volunteer == "yes"
在此先感謝。
你必須有「最後一個孩子是男孩」還是「有一個孩子是男孩」的工作? 這將工作後:
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';
根據數據庫的大小,此查詢可能會運行相當昂貴,替代的解決方案可能是最後一個孩子的性別存儲在父記錄,並更新它的每一個,如果它是一個不同的新的孩子加入時間目前父母的性別。
不幸的是,我需要「最後一個孩子是一個男孩」。這就是爲什麼我要做這樣的決定。 – David
沒問題,這只是一個醜陋的查詢仍然可能。 – iouri
你是什麼醜陋的查詢可能是? – David