如果我有一个模型User
has_many :games
和游戏has_many :events
- 我如何获得没有任何游戏的所有用户或任何有暂停事件的游戏。使用关联的模型范围
这是我曾尝试:
例子:
用户等级:
scope :with_no_games -> {
joins("LEFT OUTER JOIN games g on g.user_id = users.id").where("games.id IS NULL")
}
scope :with_suspended_games_or_no_games -> {
with_no_games.merge(Game.suspended) # <- this doesn't work
}
游戏类:
scope :suspended -> {
joins("INNER JOIN events e ON event.game_id = games.id AND event.name = 'suspended'")
}
如果我跑User.with_suspended_games_or_no_games
我得到下面的SQL声明:
SELECT \"users\".* FROM \"users\" LEFT OUTER JOIN games ON games.user_id = users.id INNER JOIN events ON events.game_id = games.id AND events.name = 'suspended' WHERE (games.user_id IS NULL)"
这不是我正在寻找的。我错过了什么?
什么是错误,是什么生成的SQL查询样子? – max
添加生成的SQL - 它不会出错,但它不会返回我所期望的。 –