用于从具有反向关系的三个表连接数据的SQL查询

时间:2012-01-10 01:04:41

标签: sql ruby-on-rails-3 join relationship

我有三张桌子:玩家,游戏,隐藏

这是播放器模型

  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)返回所有被标记为隐藏的游戏,我需要做些什么来查找仅由特定玩家隐藏的游戏...例如where('Player.id =?'hider_id)< - 这似乎不起作用。

感谢您的帮助和时间!

1 个答案:

答案 0 :(得分:0)

当然,这并没有利用太多的Rails魔法,但如果我理解你的模型,它应该有效:

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