【问题标题】:Arel complex queryArel 复杂查询
【发布时间】:2011-11-21 08:00:22
【问题描述】:

所以我有以下表格

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方式。

【问题讨论】:

    标签: sql ruby-on-rails arel


    【解决方案1】:

    使用meta_wheregem:

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

    使用to_sql方法检查。

    【讨论】:

    • 您应该查看 squeel gem 而不是 meta_where,因为它不会更新为与 Rails 3.1 一起使用。 Squeel 是由同一个开发者开发的,包含几个相同的想法……也就是说,除非你只想用它来生成一次 sql :-)
    • 太棒了。不知道这些宝石。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多