【发布时间】:2015-10-08 23:08:31
【问题描述】:
如果我有一个名为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 查询是什么样的?
-
添加了生成的 SQL - 它不会出错,但它只是没有返回我所期望的。
标签: ruby-on-rails activerecord