私はこのような私のモデルを持っています:
A < ActiveRecord::Base
- has_many :z
B < A
- has_many :y
C < A
- has_many :x
どこかで、次のようなことをしたい:
A.all.includes([:z,:y, :x])
ただし、一部のアイテムは特定のタイプのものB
であり、他のアイテムはC
.
条件付きで1つまたは別のものを含めるにはどうすればよいですか?
私はこのような私のモデルを持っています:
A < ActiveRecord::Base
- has_many :z
B < A
- has_many :y
C < A
- has_many :x
どこかで、次のようなことをしたい:
A.all.includes([:z,:y, :x])
ただし、一部のアイテムは特定のタイプのものB
であり、他のアイテムはC
.
条件付きで1つまたは別のものを含めるにはどうすればよいですか?
本当の修正は見つかりませんが、私はこれをやっています:
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)