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.

我怎样才能有条件地包括一个或另一个?

4

2 回答 2

2

虽然我没有找到真正的解决方案,但我正在这样做:

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

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

谢谢。

于 2013-03-26T16:32:53.620 回答
0

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

A.from("(#{B.includes(:y).to_sql} UNION #{C.includes(:x).to_sql}) as #{A.table_name}").includes(:z)
于 2015-08-06T18:01:30.050 回答