小编典典

如何使用ARel加入子查询?

sql

我有一些庞大的SQL请求,涉及在Rails应用程序中跨各种模型进行联接。一个请求可以包含6到10个表。

为了更快地运行请求,我想在联接中使用子查询(这样,我可以在联接之前过滤这些表,并将列减少为所需的列)。我正在尝试使用ARel实现这一目标。

我以为自己在这里找到了解决问题的方法:如何在Rails中的AREL中对子查询进行联接,但是事情一定已经改变了,因为我得到了undefinedmethod '[]' for Arel::SelectManager

有没有人知道如何实现这一目标(不使用字符串)?


阅读 229

收藏
2021-04-15

共1个答案

小编典典

皮埃尔,我认为以下是一个更好的解决方案(该要旨的启发):

a = A.arel_table  
b = B.arel_table

subquery = b.project(b[:a_id].as('A_id')).where{c > 4}  
subquery = subquery.as('intm_table')  
query = A.join(subquery).on(subquery[:A_id].eq(a[:id]))

将别名命名为“ intm_table”没有特殊的原因,我只是认为这样会减少混乱。

2021-04-15