2011-11-21 45 views
1

所以我有以下表阿雷爾複雜的查詢

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

使用meta_where寶石:

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

使用to_sql方法檢查它。

+1

您應該看看squeel gem而不是meta_where,因爲它不會更新爲與Rails 3.1配合使用。 Squeel由同一個開發人員開發,包含幾個相同的想法......也就是說,除非你只想用它來生成一次sql :-) – HakonB

+0

感謝評論,@HakonB。 –

+0

太棒了。不知道這些寶石。非常感謝你。 –