データの並び替えをしたいのですが、メソッドで得た値を並び替えることはできるでしょうか?

例えば商品(products)がどれだけ売れたか何ですが、商品の売れた数(quantity)を持っているのは中間テーブルの(line_items)というものです。なので、line_itemsがたくさんある中で特定のproductを持つline_itemのquantityを集計したものが該当します。自分はこれをtotal_countというメソッドでproduct.rbとline_item.rbに追加しました。

# total_countの中身
line_items.to_a.sum { |item| item.quantity } 

そこで質問なのですが、上記で得られる値を並び替えたりすることはできるでしょうか?

カラムの値を並び替えるのはできたのですが、複数の値を集計してある値の並び替えが全くうまくできませんでした。

こちら何かアドバイスいただけたら助かります。こう書いたらいいとか、そもそもそれじゃできない等。。。

以上ですよろしくお願いしますm(._.)m

☆追記

class LineItem < ApplicationRecord
    belongs_to :order
    belongs_to :product
    belongs_to :cart

    def total_price
        product.price * quantity
    end
end

class Product < ApplicationRecord
has_many :line_items
has_many :orders, through: :line_items
has_many :users

belongs_to :category

validates :image_url, presence: true
validates :title, :description, presence: true
validates :price, numericality: {greater_than_or_equal_to: 0.01}
validates :title, uniqueness: true

scope :get_by_name, ->(title){
    where('title like ?',"%#{title}%")
}


def total_count
    line_items.to_a.sum { |item| item.quantity} 
end

end

class Order < ApplicationRecord
    PAYMENT_TYPES = ["現金","クレジットカード","注文書"]
    has_many :line_items, dependent: :destroy
    has_many :order_items, dependent: :destroy

    belongs_to :user


    validates :name, :address, :email,:user_id, presence: true
    validates :pay_type, inclusion: PAYMENT_TYPES

    default_scope -> { order(created_at: :desc) }

    def add_line_items_from_cart(cart)
        cart.line_items.each do |item|
            item.cart_id = nil
            line_items << item
        end
    end
    def total_price
        line_items.to_a.sum { |item| item.total_price }
    end
    def total_count
        line_items.to_a.sum { |item| item.quantity}
    end
end

ActiveRecord::Schema.define(version: 20180508113923) do
  create_table "carts", force: :cascade do |t|
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

  create_table "line_items", force: :cascade do |t|
    t.integer "product_id"
    t.integer "cart_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.integer "quantity", default: 1
    t.integer "order_id"
  end

  create_table "orders", force: :cascade do |t|
    t.string "name"
    t.text "address"
    t.string "email"
    t.string "pay_type"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.integer "user_id"
    t.integer "product_id"
    t.integer "quantity"
  end

  create_table "products", force: :cascade do |t|
    t.string "title"
    t.text "description"
    t.string "image_url"
    t.decimal "price", precision: 8, scale: 2
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.string "category_id"
  end
end

です。

やりたいことは、最初に書いたようにメソッドで引き出したデータの並び替えです。total_countというメソッドでline_items(カートの中の商品兼購入された商品)の中の(商品)productと(注文数)quantityを計算して1つのproductがどのくらいquantityを持っているかを計算して出すところまではできたのですが、この引き出せた値を多い順に並び替え、すなわちline_itemsの中のproduct,の中で購入されたものが多い順に並び替えたいのです。説明が下手ですみません。

viewでeach使ってproduct.order("total_count desc").limit(5)とかでできるかとも思ったのですがうまくいきませんでした。そもそも.order("メソッド”)てのが使えないんじゃないかとも思い手詰まりになったので質問に至りました。

宜しくお願いしますm(._.)m