我的模特是这样的:
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 :(得分: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)