我正在尝试使用类似条件查询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
有什么想法吗?提前谢谢。
答案 0 :(得分:1)
includes
渴望加载关联记录,而joins
执行您想要做的事情。
这个问题在这里被多次提出过。在您提出问题之前,请确保您在此处查找并尝试找到类似的问题。
所以你想改变你的代码:
user.books.joins(slot: [room: :school]).where(schools: { id: 1 })