如何对一列求和,将另一列的值相乘并返回对象activerecord

时间:2017-10-27 03:35:54

标签: ruby-on-rails postgresql activerecord rails-activerecord

我试图找到最畅销的商品。一个项目有idprice。它是has_many ItemOrders,belongs_to项目并且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对象数组。

EDIT 如果我取出乘法它会返回项目数组,但我不认为它是最重要的项目,因为它只是对具有该ID的连接记录的计数。

1 个答案:

答案 0 :(得分:0)

想想我已经明白了。如果这是正确的话,我一如既往地思考,哈哈。

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

可能在乘以item_orders.item_id

之前无需计算items.price