且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

自定义选择的连接表

更新时间:2023-01-29 23:07:49

试试这个:

@admins   = Admin.joins(:orders).
                 select("admins.id, admins.name, orders.id, 
                          SUM((orders.operation = 'bonus')::integer) AS bonus_count, 
                          SUM((orders.operation = 'gift')::integer) AS gift_count ").
                 group("admins.id ")

# access each columns as
admin.name, admin.bonus_count, admin.gift_count

另一种选择是使用预先加载,它会使用两个查询,但可能会更快

Other option is to use eager loading, it will use two queries but might be faster

@admins  = Admin.includes(:orders)

# in admin.rb
def orders_count(type)
  # Don't use where here as it would make a separate query instead of using eager loading records
   orders.select{|x| x.operation == type}.count
end 

# access each columns as
admin.name, admin.orders_count("bonus"), admin.orders_count("gift")