0

私はトップセール商品を探しています。アイテムはidpriceです。それはhas_many ItemOrdersであり、belongs_to項目であり、item_idを持っています。私は試しました...1列を合計し、別の値を乗算してオブジェクトactiverecordを返す方法

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を持つジョインのレコードの唯一のカウントであるため、それはトップアイテムではないと思います。

答えて

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 

私はitems.price

倍する前 item_orders.item_idをカウントする必要はありません
関連する問題