2013-03-23 53 views
3

我有我的模式是這樣的:條件包括單表繼承模型

A < ActiveRecord::Base 
- has_many :z 

B < A 
- has_many :y 

C < A 
- has_many :x 

地方,我想要做的事,如:

A.all.includes([:z,:y, :x]) 

但它不工作,因爲有些項目來自特定類型B和其他是C

我該如何有條件地包括一個或另一個?

+0

我不知道,將工作,和我沒有在任何一方面Rails應用程序進行測試,但你可以嘗試'A.includes(:Z).merge(B.includes:Y ).merge(C.includes:x)' – 2013-03-24 10:31:35

+0

它不起作用。不管怎麼說,還是要謝謝你。 – caarlos0 2013-03-24 22:59:26

+0

更具體:第二次合併將使查詢只返回'C'類型。 – caarlos0 2013-03-25 19:29:03

回答

2

雖然我沒有找到一個真正的解決,我doins這樣的:

all = B.includes([:z, :y]) 
all = (all + C.includes([:z, :x])).sort_by(&:date) 

這不是很漂亮,但解決問題的時刻。 大量的速度提升。

謝謝。

0

有點混亂,但完全正確的解決方案。

A.from("(#{B.includes(:y).to_sql} UNION #{C.includes(:x).to_sql}) as #{A.table_name}").includes(:z)