我有一些庞大的SQL请求,涉及在Rails应用程序中跨各种模型进行联接。一个请求可以包含6到10个表。
为了更快地运行请求,我想在联接中使用子查询(这样,我可以在联接之前过滤这些表,并将列减少为所需的列)。我正在尝试使用ARel实现这一目标。
我以为自己在这里找到了解决问题的方法:如何在Rails中的AREL中对子查询进行联接,但是事情一定已经改变了,因为我得到了undefinedmethod '[]' for Arel::SelectManager。
undefinedmethod '[]' for Arel::SelectManager
有没有人知道如何实现这一目标(不使用字符串)?
皮埃尔,我认为以下是一个更好的解决方案(该要旨的启发):
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”没有特殊的原因,我只是认为这样会减少混乱。