通过has_many关联连接表列的组

时间:2015-07-06 13:41:58

标签: mysql ruby-on-rails activerecord

下面是我的关系

    class User < ActiveRecord::Base
      has_many :orders, dependent: :destroy
    end

    # Table name: orders
    #  id               :integer          not null, primary key
    #  status           :string(255)
    #  total_cost       :integer          default(0)
    #  user_id          :integer
    #  created_at       :datetime
    #  updated_at       :datetime

class Order < ActiveRecord::Base
      belongs_to :user
    end

我尝试列出用户的订单数量。预期产出

 {"user1@gmail.com"=>3, "user1@gmail.com"=>2, "user1@gmail.com"=>1}

我尝试了以下

User.joins(:orders).group("orders.users.id").count

并输出以下内容(键为用户ID,值为订单计数)

{2=>3, 3=>2, 4=>1} 

如何将用户电子邮件和值替换为订单计数?

2 个答案:

答案 0 :(得分:1)

这适合你吗?

Hash[User.includes(:orders).map{|u| [u.email, u.orders.count ]}]

答案 1 :(得分:0)

您可以使用:

User.joins(:orders).group(:email).count

参见&#34;分组项目总数&#34; RailsGuides中Group文档中的部分。您需要确保email列上有唯一约束。