SQL-запрос для объединения данных из трех таблиц с обратными связями - PullRequest
0 голосов
/ 10 января 2012

У меня есть три стола: игрок, игры, скрыть

Вот модель игрока

  has_many :hides, :foreign_key=> "hider_id",
                   :dependent => :destroy

  has_many :hidees, :through => :hides

Вот атрибуты, принадлежащие скрытой модели.

  attr_accessible :hidee_id

  belongs_to :hider, :class_name => "Player"
  belongs_to :hidee, :class_name => "Game"

  validates :hider_id, :presence => true
  validates :hidee_id, :presence => true

Вот модель игры:

  has_many :reverse_hides,  :foreign_key => "hidee_id",
                            :class_name => "Hide",
                            :dependent => :destroy

  has_many :hiders, :through => :reverse_hides

Я хочу написать запрос, который вернул бы все игры, которые были скрыты текущим игроком.

В настоящее время у меня есть: Game.joins(:hiders), которыйвозвращает все игры, помеченные как скрытые, что мне нужно сделать, чтобы найти игры, скрытые только конкретным игроком ... например, где ('Player.id =?' hider_id) <- это, похоже, не работает,</p>

Я ценю вашу помощь и время!

1 Ответ

0 голосов
/ 17 января 2012

Конечно, это не использует преимущества магии Rails, но должно работать, если я правильно понял ваши модели:

Game.joins('JOIN hides ON hides.hidee_id = games.id').where('hides.hider_id = ?', player.id)
...