2016-06-12 26 views
0

私はそうのような条件で熱心にロードされた関連付けを入れ子に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

includes熱心な負荷関連レコードですが、joinsはあなたがしたいことをします。

この質問はここで何度も聞かれました。尋ねる前に似たような質問を探してみてください。

ですから、このようなあなたのコードに変更したい:遅れて申し訳ありません

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

+0

こんにちはKkulikovskisを、が、私は次のエラーが出るように、実際に働いていなかった:PG :: UndefinedTable:ERRORを:テーブルのFROM句のエントリがない...私のために働いたのは次のとおりです:u.books.joins(slot:[room::school])where(schools:{id:1})。あなたには意味がありますか? –

+0

はい、申し訳ありません。私の答えは完全ではありません。なぜなら、複数のテーブルを結合すると、 'where'で直接アクセスすることができるからです。私は私の答えを更新しました – Kkulikovskis

関連する問題