指定多个嵌套预加载关联的条件

Specifying Conditions on Multiple Nested Eager Loaded Associations

我正在尝试在 ActiveRecord 上查询多个嵌套的预加载关联,条件如下:

user.books.includes(slot: [room: :school]).where("books.slot.room.school.id = 1")

显然这个查询是错误的,但基本上我想要达到的是某个学校的 user.books 关系。

我的模型结构是:

class User < ActiveRecord::Base
  has_many :books
  has_many :slots, through: :books
  has_many :rooms, through: :slots
  has_many :schools
end

class Book < ActiveRecord::Base
  belongs_to :user
  belongs_to :slot
end

class Slot < ActiveRecord::Base
  has_many :books
  belongs_to :room
end

class Room < ActiveRecord::Base
  belongs_to :school
  has_many :slots
end

class School < ActiveRecord::Base
  has_many :users
  has_many :rooms
  has_many :slots, through: :rooms
  has_many :books, through: :slots
end

有什么想法吗?提前致谢。

includes 急切加载关联记录,而 joins 做你想做的事。

这个问题已经被问过很多次了。在提问之前,请确保您在此处查看并尝试找到类似的问题。

所以您想像这样更改代码:

user.books.joins(slot: [room: :school]).where(schools: { id: 1 })