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