我正在努力解决Active Record连接问题。ActiveRecord多重连接?
我有这样的数据库表结构:
A - B - C - D - E
和
A - F - E
我想从一个得到所有的记录,如果这两种路径:
A - B - C - D - E
A - F - E
是满意。
我试图与活动记录:
A.joins(:B => {:C => {:D => :E}}, :F => :E)
.where("some constraints on E and …")
但这是不行的,因为所有作为内部生成的连接是这样的:
SELECT A.*
FROM A
INNER JOIN B ON A.b_id = B.id
INNER JOIN C ON B.c_id = C.id
INNER JOIN D ON C.d_id = D.id
INNER JOIN E ON D.e_id = E.id
INNER JOIN F ON A.f_id = F.id
INNER JOIN E E_F ON E_F.f_id = F.id
WHERE ("some constraints on E")
我希望我没有错类型的东西在这里,但核心是,在生成的SQL语句中,两个路径都可以在ON子句中找到。
问题是,必须满足这两条路径才能从表A返回记录,对吗?
我需要一条从A返回两条路径的记录的语句。 最后,他们与uniq()
独一无二。
我还试图merge()
两个单独的选择/连接(路径A - B - C - D - E" and "A - F - E") but
合并()does an intersection. The only solution that I have come up with, is to
+`两个单独的结果集,但问题是,我得到的阵列作为结果,因此我不能使用(雷)分页。 第二,是不是在结果集越来越大的一个很好的解决方案。
我会很感激任何提示。 谢谢!
非常感谢你的揭示提示!您需要的解决方案的核心是EXISTS或OR组合。最后,我将范围定义为带参数的lambda表达式。 (我不想打扰所有的细节;-) –
再次感谢! :-) 它就像一个魅力! –