【发布时间】:2021-06-12 01:21:22
【问题描述】:
我有一种情况,我想对某些记录和eager_load 关联进行分组,所以我创建了一个类似这样的视图:
select group id, array_agg(order_ids) order_ids
from my_table
group by 1
所以它会有这样的记录:
id | order_ids
1 | {1, 2, 3}
2 | {4, 5}
然后我为这个视图创建了一个模型:
class MyGroup < ApplicationRecord
scope :with_orders, -> {
joins("JOIN orders on orders.id = any(order_ids)")
.eager_load(orders: [:address, :products])
}
has_many :orders
end
问题是我找不到删除或覆盖 Rails 为 orders 关系生成的连接的方法,如下所示:
LEFT OUTER JOIN "orders" "orders_my_groups" ON "orders_my_groups"."my_group_id" = "my_groups"."id"
有没有办法告诉 Rails 使用特定的连接而不是 has_many 关联生成的连接?或者在这种情况下我可以使用任何其他类型的关联吗?
我在这里要做的是在单个查询中急切地加载组中的所有关联。
【问题讨论】:
标签: ruby-on-rails rails-activerecord