基于where条件的部分预加载关联

时间:2019-08-21 18:50:58

标签: sql ruby-on-rails activerecord

我有两个模型:

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中。

0 个答案:

没有答案