ker*_*lin 5 mysql sql named-scope ruby-on-rails
我正在寻找一个答案,它将通过(最好)一个named_scope返回一个用户对象数组,或者通过User模型上的类方法返回一些操作.
所以没有进一步的...
我有两个表:用户和战斗.
战斗有以下几个关注的栏目:
如您所见,用户可以是挑战者或挑战者,但不是两者.
我有一个原始的SQL语句,它返回按最多wins属性分组的战斗机属性(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;
Run Code Online (Sandbox Code Playgroud)
所以给定这个信息,如何通过(最好)一个named_scope返回一个用户对象数组,或者通过用户模型上的类方法进行一些操作?
我认为您可以尝试这样的方法来重新创建查询结果:
class User
named_scope :winners,
:select => 'users.*, COUNT(fight.id) AS wins',
:join => :fights,
:conditions => ['(fights.challenger_id = user_id AND fights.challenger_won = TRUE) OR (fights.challengee_id = user_id AND NOT fights.challenger_won = FALSE)']
:group => 'user_id'
end
Run Code Online (Sandbox Code Playgroud)
但是,为了缓存目的,您可能需要考虑向用户模型添加 win_count 字段。如果您为战斗的获胜者创建一个 setter 方法,则可以在 win_count 发生变化时立即增加 win_count 。