【发布时间】:2011-06-22 09:16:12
【问题描述】:
我正在寻找一个答案,该答案将通过(最好)named_scope 或通过 User 模型上执行某些操作的类方法返回一组用户对象。
那就不用多说了……
我有两个表:用户和战斗。
- 用户进行了多次战斗(has_many :fights, :foreign_key => 'challenge_id or challengee_id')
- 战斗属于用户(belongs_to :challenger, :class_name => 'User'...belongs_to :challengee, :class_name => 'User')
Fight 关注以下几列:
- challenge_id (user_id fk)
- challenge_id (user_id fk)
- challenge_won(布尔值)
如您所见,用户可以是挑战者或挑战者,但不能同时是两者。
- 如果用户是挑战者并且challenger_won = true,则视为获胜。
- 如果用户是挑战者并且challenge_won = false,则视为获胜。
- 如果challenge_won = null,则忽略它。
我有一个原始 SQL 语句,它返回一个按大多数 wins 属性分组的 fighter 属性(user_id):
SELECT a.fighter, COUNT(*) AS wins
FROM (SELECT challenger_id AS fighter
FROM fights
WHERE challenger_won = TRUE
UNION ALL
SELECT challengee_id AS fighter
FROM fights
WHERE challenger_won = FALSE
) AS a
GROUP BY a.fighter;
因此,鉴于此信息,我如何通过(最好)named_scope 或通过 User 模型上执行某些操作的类方法返回用户对象数组?
【问题讨论】:
-
考虑将
fights表中的challenger_won列更改为winner_id(user_id fk),这将使查找结果更加清晰。然后你可以有一个has_many :wins, :class_name => 'Fight', :foreign_key => 'winner_id'这将允许你做user.wins.count来找到总胜利
标签: sql mysql ruby-on-rails named-scope