简体   繁体   English

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

[英]Convert SQL query to Rails Active Record query

Anyhow, I am able to fetch result in rails console by putting lines below 无论如何,我可以通过在下面的行中在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")

It gives result below: 结果如下:

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

But I needed to get active records in groups variable but I got an Array (checked via group.class ) so I won't be able to do extra calculations in active records. 但是我需要在groups变量中获取活动记录,但是我得到了一个Array (通过group.class检查),所以我将无法在活动记录中进行额外的计算。

Can anybuddy help me to find Active Record of Above Mysql Query: I need Model.joins(:another_model) anybuddy可以帮助我找到上述MySQL查询的活动记录吗:我需要Model.joins(:another_model)

Associations are below: 关联如下:

 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

It's probably not exact, but I imagine you'd want something like this: 这可能不准确,但是我想您会想要这样的东西:

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

Hopefully that will at least be enough to point you in the right direction. 希望这至少足以为您指明正确的方向。 Given the associations you show, Rails should be smart enough to join UserGroups to UserGroupMemberships , UserGroupMemberships to Users , and Users to Bets . 给定您显示的关联,Rails应该足够聪明,可以将UserGroups加入到UserGroupMemberships ,将UserGroupMemberships加入到Users ,并将UsersBets

When you use .select , you can fetch the non-attribute values from the resulting ActiveRecord objects, so if you save this relation as user_groups , you should be able to call user_groups.first.bankroll_net_profit . 使用.select ,可以从生成的ActiveRecord对象中获取非属性值,因此,如果将此关系另存为user_groups ,则应该能够调用user_groups.first.bankroll_net_profit Note that if you're using PostGreSQL, this will be a String , and need to be converted to the correct data type with .to_f or whatever. 请注意,如果您使用的是PostGreSQL,则它将为String ,并且需要使用.to_f或其他任何.to_f将其转换为正确的数据类型。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM