我有这样的模型:
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
.
我怎样才能有条件地包括一个或另一个?
虽然我没有找到真正的解决方案,但我正在这样做:
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)