Arel复杂查询

时间:2011-11-21 08:00:22

标签: sql ruby-on-rails arel

所以我有以下表格

class Game
  belongs_to :player0, :class => "Player"
  belongs_to :player1, :class => "Player"
end

class Player
  belongs_to :user
end


class User
  #has a field called race
end

现在我需要一个查询来执行以下操作

查找所有其中player0.user.race为“x”且player1.user.race为“y”的游戏或者player0.user.race为“y”且player1.user.race为“x”。

我刚刚开始使用rails 3.我可以在sql中轻松编写查询,但我宁愿学习arel方式。

1 个答案:

答案 0 :(得分:1)

使用meta_where gem:

Game.joins(:player0, :player1).where((:player0 => {:user => {:race => 'x'} | {:race => 'y'}}) | (:player1 => {:user => {:race => 'x'} | {:race => 'y'}}))

使用to_sql方法检查它。