无论如何,我可以通过在
下面添加行来获取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
答案 0 :(得分:2)
这可能不太准确,但我想你会想要这样的东西:
UserGroup.
select('user_groups.*, sum(-bets.amount + bets.amount_paid) as bankroll_net_profit').
joins(:users => :bets).
group('user_groups.id')
希望这至少足以指出你正确的方向。鉴于您显示的关联,Rails应该足够聪明,可以将UserGroups
加入UserGroupMemberships
,UserGroupMemberships
加入Users
,Users
加入Bets
。
使用.select
时,您可以从生成的ActiveRecord对象中获取非属性值,因此如果您将此关系保存为user_groups
,则应该可以调用user_groups.first.bankroll_net_profit
。 Note that if you're using PostGreSQL, this will be a String
,需要使用.to_f
或其他任何内容转换为正确的数据类型。