指定多个嵌套预加载关联的条件
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 })
我正在尝试在 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 })