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