我正在尋找一個答案,將通過(最好)named_scope或通過用戶模型上的類方法返回一個用戶對象數組,該用戶模型進行一些操作。通過named_scope返回對象數組 - has_many ... belongs_to關聯; UNION ALL查詢
所以事不宜遲......
我有兩個表:用戶和打架。
- 用戶有許多戰鬥(的has_many:戰鬥,:foreign_key => 'challenger_id或challengee_id')
- 撲滅屬於用戶(belongs_to的:挑戰者,:CLASS_NAME => '用戶' ... belongs_to的:challengee ,:CLASS_NAME => '用戶')
撲滅具有關注的下列:
- challenger_id(USER_ID FK)
- CHALL engee_id(USER_ID FK)
- challenger_won(布爾)
正如你所看到的,用戶可以是一個挑戰者或challengee,但不能同時使用。
- 如果用戶是挑戰者並且challenger_won = true,那麼它被認爲是勝利。
- 如果用戶是挑戰者而challenger_won = false,則認爲它是雙贏。
- 如果challenger_won = null,那麼就忽略它。
我有一個返回由多數勝利分組戰鬥機屬性(user_ID的)原始SQL語句屬性:
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或通過用戶模型上的類方法進行一些操作?
考慮在`fights`表改變`challenger_won`列,到`winner_id`(USER_ID FK),這將使發現贏得了很多清潔。然後,你可以有一個'has_many:wins,:class_name =>'Fight',:foreign_key =>'winner_id',這將允許你做`user.wins.count`找到總勝數 – joshnuss 2011-02-12 23:19:59