2015-02-23 58 views
0

我已經OrderItem車型加入了OrderItemActiveRecord組和計數 - count_id來自哪裏?

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

此查詢查找最受歡迎的項目的ID:

OrderItem.group(:item_id).order("count_id DESC").count("id").first(10).map(&:first) 

這工作,但什麼是count_id?爲什麼這個工作?在order("count_id...的幕後發生了什麼?

回答

0

count_id是Rails賦予SQL聚合函數COUNT("order_items"."id")的別名。

OrderItem.group(:item_id).count(:id)數行的每個單項的數量:

SELECT COUNT("order_items"."id") AS count_id, item_id AS item_id FROM "order_items" GROUP BY item_id 

count_id部分背後的神奇的是在ActiveRecord::Calculations。別名在此確定:

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

之後,order列出的項目出現從最大到最小:爲column_alias_for列表顯示這個例子

aggregate_alias = column_alias_for([operation, column_name].join(' ')) 

,並且該方法的意見。返回值將是一個散列,其中的鍵是項目ID,值是發生的次數。

first抓取出現次數最多的10項,map取出item_id值。