在多个嵌套的Eager加载关联上指定条件

时间:2016-06-12 15:17:21

标签: ruby-on-rails activerecord eager-loading

我正在尝试使用类似条件查询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

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

1 个答案:

答案 0 :(得分:1)

includes渴望加载关联记录,而joins执行您想要做的事情。

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

所以你想改变你的代码:

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