Sql 在Rails 4中,我如何创建一个命名范围,在解析WHERE子句后对_进行分组?

Sql 在Rails 4中,我如何创建一个命名范围,在解析WHERE子句后对_进行分组?,sql,join,ruby-on-rails-4,group-by,rails-activerecord,Sql,Join,Ruby On Rails 4,Group By,Rails Activerecord,我有一个棘手的问题,我需要得到一个消费者列表,从最多到最少的“签到”次数排序。当然,我有一个消费者模型和一个签入模型。其理念是,消费者可以在一个月内多次入住。这个范围是用来作为一种排行榜谁有最多的签本月 这是我尝试的,但我认为它不起作用,因为GROUP_BY在何处出现条件之前正在运行。也许我需要某种类型的子查询来进行连接,但我甚至不能完全确定它会是什么样子 class Consumer < ActiveRecord::Base has_many :check_ins, dependen

我有一个棘手的问题,我需要得到一个消费者列表,从最多到最少的“签到”次数排序。当然,我有一个消费者模型和一个签入模型。其理念是,消费者可以在一个月内多次入住。这个范围是用来作为一种排行榜谁有最多的签本月

这是我尝试的,但我认为它不起作用,因为GROUP_BY在何处出现条件之前正在运行。也许我需要某种类型的子查询来进行连接,但我甚至不能完全确定它会是什么样子

class Consumer < ActiveRecord::Base
  has_many :check_ins, dependent: :destroy
  has_many :promo_codes

  validates :email, :email => true
  validates_uniqueness_of :email
  # TODO: validate email
  validates_presence_of :first_name
  validates_presence_of :last_name

  scope :with_most_checkins_this_month, ->(num_to_show) {  select("consumers.*, count( check_ins.id ) AS check_ins_count").
      joins(:check_ins).
      where('check_ins.created_at >= ? AND check_ins.created_at <= ?', DateTime.now.beginning_of_month, DateTime.now.end_of_month).
      group("consumers.id").
      order("check_ins_count DESC").
      limit(num_to_show) }
end
类消费者true
验证电子邮件的唯一性
#TODO:验证电子邮件
验证是否存在:first\u name
验证是否存在:姓氏
范围:对于本月的大多数签入,->(num-to-show){select(“consumers.*,count(check-ins.id)AS-check-ins-count”)。
联接(:签入)。

where('check_-ins.created_at>=?和check_-ins.created_at Why不起作用?它似乎对我起作用。对于每个元素,你都可以访问它的计数器。例如:
Customer。本月(10)大多数签入。首先['check-ins\u count']