ActiveRecord组和计数-计数id来自哪里?

ActiveRecord组和计数-计数id来自哪里?,activerecord,Activerecord,我有订单和项目模型,它们由订单项目加入: class OrderItem < ActiveRecord::Base belongs_to :order belongs_to :item 这是可行的,但是什么是count\u id?为什么这样做有效?这里在幕后使用的是order(“count\u id…?count\u id是Rails为SQL聚合函数提供的别名count(“order\u items”。.id”) OrderItem.group(:item\u id).count

我有
订单
项目
模型,它们由
订单项目
加入:

class OrderItem < ActiveRecord::Base
  belongs_to :order
  belongs_to :item

这是可行的,但是什么是
count\u id
?为什么这样做有效?这里在幕后使用的是
order(“count\u id…

count\u id
是Rails为SQL聚合函数提供的别名
count(“order\u items”。.id”)

OrderItem.group(:item\u id).count(:id)
统计每个项目的行数:

SELECT COUNT("order_items"."id") AS count_id, item_id AS item_id FROM "order_items"  GROUP BY item_id
count\u id
部分背后的魔力在于。别名在此处确定:

aggregate_alias = column_alias_for([operation, column_name].join(' '))
列表的
列的方法注释显示了以下示例:

#   column_alias_for("count", "id")              # => "count_id"
然后,
order
从最大到最小列出项目出现次数。返回值将是一个散列,其中键是项目ID,值是出现次数

first
获取出现次数最多的10个项目,然后
map
提取
item\u id

#   column_alias_for("count", "id")              # => "count_id"