我有两个模型:
class Thread < ApplicationRecord
has_many :posts
end
class Post < ApplicationRecord
belongs_to :thread
belongs_to :user
end
我想编写一个查询,该查询将加载所有线程,但也会由特定用户组预加载任何posts
。
例如:
thread(id 1) has a post(id 1) by user(id 1) and a post(id 2) by user(id 2)
thread(id 2) has a post(id 3) by user(id 2) and a post(id 4) by user(id 3)
我想编写一个ActiveRecord查询,该查询返回两个线程,并预加载用户(id 1)帖子。
因此,线程(ID 1)应该预加载帖子(ID 1),而不是帖子(ID 2)。线程(id 2)应该返回,但没有预载帖子
我的第一个念头是Thread.all.includes(:posts).where(posts: {user_id: [1,2,3]})
,但这没有用,因为它只返回threads
,其中有1,2或3位用户之一发了帖。
在原始SQL中,我只使用一个子查询,但是这样就无法轻松地将预加载到Rails中。