gpt4 book ai didi

mysql - 将 SQL 查询转换为 Rails Active Record 查询

转载 作者:行者123 更新时间:2023-11-29 08:21:48 25 4
gpt4 key购买 nike

无论如何,我可以通过在下面放置行来获取 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 检查),所以我不会'无法在事件记录中进行额外的计算。

哪位 friend 能帮我找到上面Mysql查询的Active Record吗:我需要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

最佳答案

这可能不准确,但我想你会想要这样的东西:

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

希望这至少足以为您指明正确的方向。鉴于您显示的关联,Rails 应该足够智能,可以将 UserGroups 加入到 UserGroupMembershipsUserGroupMemberships 加入 Users,并且用户进行投注

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

关于mysql - 将 SQL 查询转换为 Rails Active Record 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19183835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com