我正在尝试找到最畅销的商品。项目具有id
和price
。它has_many
ItemOrders,它belongs_to
Item 并具有item_id
。我试过了...
Item.select('items.*, COUNT(item_orders.item_id) AS item_count')
.joins(:item_orders)
.group('items.id')
.order('SUM(item_count * items.price) DESC')
我并没有真正看到断开连接的地方。我以前做过类似的事情要快得多。我得到的只是关系对象。我正在尝试获取 Item 对象的数组。
编辑如果我去掉乘法,它会返回 Items 数组,但我认为这不是最重要的项目,因为它只是使用该 id 的连接上的记录计数。
认为我已经知道了。我像往常一样过度思考这是否正确,哈哈。
def self.top_items(quantity=nil)
Item.select('items.*, sum(item_orders.item_id * items.price) as sum')
.joins(:item_orders)
.group(:id)
.order("sum desc")
.limit(quantity)
end
在乘以items.price
之前,我可能不需要计算item_orders.item_id