Rails has_many通过OR查询

时间:2012-07-16 12:42:02

标签: ruby-on-rails activerecord has-many-through

class Game < ActiveRecord::Base
  has_many :game_types, :dependent => :destroy
  has_many :types, :through => :game_types
end

class Type < ActiveRecord::Base
  has_many :game_types, :dependent => :destroy
  has_many :games, :through => :game_types
end

游戏类型1 ==单人游戏 游戏类型2 ==多人游戏

如何查询类型ID为1或2或两者的游戏?

此外,我如何查询没有的游戏?

这通过will_paginate与分页一起使用,因此单个查询更可取。

提前感谢您拯救我的理智。

1 个答案:

答案 0 :(得分:3)

在rails中,您总是可以使用简单的SQL。 OR尚未在Arel中完全实现(我最后检查过),所以你想要的是这样的:

Game.joins("game_types ON (game_types.game_id = games.id)").where("game_types.id IN (1,2)")

这样查询仍然具有合理的性能。您可以稍微扩展一下,不要包含对ID的直接引用,但这取决于您。