2013-10-04 146 views
0

无论如何,我能够通过将线以下转换SQL查询到Rails的活动记录查询

group = UserGroup.find_by_sql("select user_group_memberships.user_group_id, sum(-bets.amount + bets.amount_paid) as bankroll_net_profit from bets inner join user_group_memberships ON bets.user_id = user_group_memberships.user_id GROUP BY user_group_memberships.user_group_id") 

它提供了以下结果来获取导致铁轨控制台:

-+-----------------------------------+ 
| user_group_id | bankroll_net_profit | 
+---------------+---------------------+ 
|    1 |    4765 | 
|   57 |    1517 | 
|   58 |     -20 | 
|   62 |    1517 | 
|   64 |    1517 | 
|   66 |    1507 | 
|   67 |     995 | 
|   82 |    1517 | 
-+-----------------------------------+ 

但是我需要去活动记录groups变量,但我得到Array(通过group.class检查),所以我不能在活动记录中进行额外的计算。

能anybuddy帮我找上面MySQL查询的活动记录:我需要Model.joins(:another_model)

协会低于:

class UserGroup < ActiveRecord::Base 
    has_many :user_group_memberships 
    has_many :users, :through => :user_group_memberships 

class User < ActiveRecord::Base 
    has_many :user_group_memberships 
    has_many :user_groups, :through => :user_group_memberships 


class Bet < ActiveRecord::Base 
    belongs_to :user 

回答

2

它可能不完全一样,但我想象一下你想要的东西是这样的:

UserGroup. 
    select('user_groups.*, sum(-bets.amount + bets.amount_paid) as bankroll_net_profit'). 
    joins(:users => :bets). 
    group('user_groups.id') 

希望至少可以让你指向正确的方向ñ。鉴于您展示的关联,Rails应足够聪明,可将UserGroupsUserGroupMemberships,UserGroupMembershipsUsersUsersBets

当您使用.select时,您可以从生成的ActiveRecord对象中获取非属性值,因此如果将此关系保存为user_groups,则应该可以调用user_groups.first.bankroll_net_profitNote that if you're using PostGreSQL, this will be a String,需要转换成正确的数据类型.to_f或其他什么。