条件包括在单表继承模型中

时间:2013-03-23 20:12:14

标签: ruby-on-rails activerecord

我的模特是这样的:

A < ActiveRecord::Base
- has_many :z

B < A
- has_many :y

C < A
- has_many :x

在某个地方,我想做类似的事情:

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

但它不起作用,因为某些项目来自特定类型B而其他项目来自C

我如何有条件地包含一个或另一个?

2 个答案:

答案 0 :(得分:2)

虽然我找不到真正的解决办法,但我也是这样做的:

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

它不是那么漂亮,但暂时解决了这个问题。 速度提升了很多。

感谢。

答案 1 :(得分:0)

有点乱,但完全正确的解决方案。

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