Ruby on rails 查找使用ActiveRecord下了两个或多个订单的用户

Ruby on rails 查找使用ActiveRecord下了两个或多个订单的用户,ruby-on-rails,activerecord,active-record-query,Ruby On Rails,Activerecord,Active Record Query,使用以下Rails型号: class User < ActiveRecord::Base has_many :orders end class Order < ActiveRecord::Base belongs_to :user end 但它不起作用。请帮忙。我无法从文档中找出如何使用having子句,或者它是否是正确的方法。 如果你需要更多信息,请告诉我。谢谢 更新:以下是Rails生成的sql查询: SELEC

使用以下Rails型号:

    class User < ActiveRecord::Base
      has_many :orders
    end

    class Order < ActiveRecord::Base
      belongs_to :user
    end
但它不起作用。请帮忙。我无法从文档中找出如何使用having子句,或者它是否是正确的方法。 如果你需要更多信息,请告诉我。谢谢

更新:以下是Rails生成的sql查询:

    SELECT user_id 
    FROM "users" 
    INNER JOIN "orders" 
    ON "orders"."user_id" = "users"."id" 
    WHERE (orders.created_at >= '2017-05-02') 
    GROUP BY orders.user_id 
    HAVING COUNT(orders.user_id) > 1

您可以查询以查找过去有2个以上订单的所有用户及其最近创建的订单。然后选择最新订单创建时间不到一个月的用户。像这样:

repeat_users = User.joins(:orders).group("(users.id) having count(users.id) > 2").select("users.*", "max(orders.created_at) as last_order_time")

past_month_users = repeat_users.select{|user| user.last_order_time > Time.now - 1.month}

解释不起作用。我得到了一个
#
数组,我希望有一批用户。你能发布在后台运行的SQL查询吗?@Pavan我用SQL查询更新了。效率很低。。另外,
选择
拔出
一起?谢谢你的快速回复@mohistrivastava我对你的查询有疑问。如果您拥有
。拥有('COUNT(orders.user\u id)>1')
是否只包括开始日期之后的订单?我需要的计数,以包括所有订单的用户在过去。谢谢使用第三个代码块,您可以不使用
pull
,它仍然可以工作,而且效率更高。这样,查询只会在数据库中点击一次。将我的答案编辑为只包含一个查询。我显然误解了这个问题,不过我为自己辩护,早些时候最初的问题并不是这个问题。不过我道歉。我希望这对你有用。谢谢@mohistrivastava。是的,我错了,我更新了问题,因为原来的问题显然不清楚。提问是一门艺术;)
repeat_users = User.joins(:orders).group("(users.id) having count(users.id) > 2").select("users.*", "max(orders.created_at) as last_order_time")

past_month_users = repeat_users.select{|user| user.last_order_time > Time.now - 1.month}