2016-06-12 3 views
0

Я пытаюсь запросить на ActiveRecord нескольких вложенных нетерпеливые нагруженные ассоциации с условиями, как так:Задание условия на Multiple Вложенные Нетерпеливый Loaded ассоциации

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

Очевидно, что этот вопрос не так, но в основном то, что я пытаюсь досягаемость - это отношение пользовательских книг для определенной школы.

Моя модель структура:

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

includes eager загружает записи ассоциации, а joins делает то, что вы хотите сделать.

Этот вопрос задал здесь несколько раз. Пожалуйста, убедитесь, что вы смотрите и пытаетесь найти аналогичный вопрос здесь, прежде чем задавать его.

Так что вы хотите изменить свой код так:

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

+0

Привет Kkulikovskis, извините за задержку, но это на самом деле не работал, как я получаю следующую ошибку: PG :: UndefinedTable: ERROR : отсутствует запись FROM-clause для таблицы ... что это сработало для меня: u.books.joins (slot: [room:: school]). где (школы: {id: 1}). Это имеет смысл для вас? –

+0

да, извините. Мой ответ не имеет смысла, поскольку, если вы присоедините несколько таблиц, вы можете получить к ним доступ непосредственно в 'where'. Я обновил свой ответ – Kkulikovskis

 Смежные вопросы

  • Нет связанных вопросов^_^