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
。
我該如何有條件地包括一個或另一個?
我有我的模式是這樣的:條件包括單表繼承模型
A < ActiveRecord::Base
- has_many :z
B < A
- has_many :y
C < A
- has_many :x
地方,我想要做的事,如:
A.all.includes([:z,:y, :x])
但它不工作,因爲有些項目來自特定類型B
和其他是C
。
我該如何有條件地包括一個或另一個?
雖然我沒有找到一個真正的解決,我doins這樣的:
all = B.includes([:z, :y])
all = (all + C.includes([:z, :x])).sort_by(&:date)
這不是很漂亮,但解決問題的時刻。 大量的速度提升。
謝謝。
有點混亂,但完全正確的解決方案。
A.from("(#{B.includes(:y).to_sql} UNION #{C.includes(:x).to_sql}) as #{A.table_name}").includes(:z)
我不知道,將工作,和我沒有在任何一方面Rails應用程序進行測試,但你可以嘗試'A.includes(:Z).merge(B.includes:Y ).merge(C.includes:x)' – 2013-03-24 10:31:35
它不起作用。不管怎麼說,還是要謝謝你。 – caarlos0 2013-03-24 22:59:26
更具體:第二次合併將使查詢只返回'C'類型。 – caarlos0 2013-03-25 19:29:03