2013-03-23 64 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)