質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.83%

  • Ruby

    6575questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

ランキングの表示の仕方

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 45

takeke

score 11

引き出したデータを並び替えてランキングを作りたいのですが記述の仕方がわからず困っています。

やりたいことはecサイトの売り上げランキングを作りたいと思っています。

各商品がどれだけ売れたかは引き出すことができたのですが、それを並び替えたりする方法がわかりません。

参考にしていたのは(https://qiita.com/Inp/items/dcd1d6103b4215859e8c)や(https://qiita.com/YusukeHarada/items/1b9305a1c5785ac7ca10)でソート機能など参考にしたのですがまだ理解が追いつかずうまく実装できませんでした。

現在コントローラー内に@products = Product.allでproduct.rbに

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


でviewにeach使用してproduct.total_countで各productがどれだけ売れたかはわかるのですが、ここに.order.limitとかで実装できると思ったのですがうまくいきませんでした。何かわかりそうな方いましたらとよろしくお願いいたします!

☆追記

上記total_countはメソッドです。なのでメソッドで引き出した値を並び替えたいという事です。

以下参考データ添付させていただきます。
schema.rb

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

  create_table "users", force: :cascade do |t|
    t.string "name"
    t.string "password_digest"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.string "email"
    t.string "reset_digest"
    t.datetime "reset_sent_at"
    t.boolean "admin", default: false
  end

end


line_item.rb

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

    def total_price
        product.price * quantity
    end
end


product.rb

class Product < ApplicationRecord

    has_many :line_items
    has_many :orders, through: :line_items
     has_many :users, through: :favorites

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


order.rb

class Order < ApplicationRecord
    has_many :line_items, dependent: :destroy
    belongs_to :user

    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

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

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

私はRubyはやっていないので出鱈目なことを言うかもしれませんが。


まず、情報がわかりにくいです。

total_count関数らしいですが、これってメンバ関数 ( メソッド ) としてでしょうか?
それともC++でいうグローバル関数 ( クラスに属さない関数 )でしょうか?

またline_itemsってなんでしょうか?

定義があいまいすぎます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/12 15:49

    回答ありがとうございます!わかりずらくて申し訳ないです。始めたばかりなのですが文字制限あったのでどこまでデータ添付したらいいかと思いかなり省略してしまいました、、、
    total_countはメソッドです。productとline_itemモデルに書きました
    line_itemsは中間テーブルです。ここに商品id(product_id)と購入数(quantity)があります

    なので、質問内容は、メソッドで出した数値を並び替えられるか?ということになります!

    調べてみてはいるのですがカラムの数値を並び替える記事はたくさんあったのですが、メソッドからのものは見つからないので質問させていただきました。

    必要なデータなどありましたら用意しますので、またよろしくお願いしますm(._.)m

    キャンセル

  • 2018/05/12 16:17

    "質問本文に" 情報を記述してください。( "編集"ボタンで可能だと思う。 )
    私だけじゃなくて他の回答者も読みますから。

    というか、質問文と質問者さんのreplyを再度読み直してみてください。
    たぶん「意味不明だわ!」ってなると思います。
    まずproduct, line_item, line_itemsの関係性や、持っているメンバ (フィールド,メソッド) がわかりにくい。もしかしたら一般的な組み方と質問者さんの組み方がぜんぜん違うかもしれない。
    これではわかるわけがありません。

    字数制限はありますが、記述して「100文字で収めましょう」みたいな感じで提示されたらそれで削りましょう。
    せめて

    // int id, String name というフィールドを持った productがあるとする

    みたいなコメントでもいいから載せて。

    で、どうしても削れないならサイトは忘れましたが、コードを載せてアップするサイトがあった気がします。それを利用するとか、
    プロジェクト一式をzipファイルに圧縮してアップロードサイトにアップして...とか。
    情報は命です。

    キャンセル

  • 2018/05/12 18:09

    度々申し訳ないです。参考データ添付できました。
    また、何かお気付きになられたことございましたら宜しくお願いしますm(._.)m

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.83%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    HashとArrayの使い方がわからず悩んでいます...

    Ruby on Railsを先週から勉強はじめました。 以下のコードでわからないとこがあるので教えて下さい...。宜しくお願いします。 ①『item.csv』というcvsデ

  • 解決済

    オブジェクト型配列について

    public class Item{ String name; int price = 100; } public class main{ public

  • 受付中

    モデルにvalidatesをつけない方法

    モデルにvalidatesをつけない方法はあるのでしょうか? 現在postモデルにcategoryモデルを紐付けております。 post投稿時にcategoryをcate

  • 解決済

    Ruby(Ruby on Rails)で特定の値を合計したい

    開発環境 MacOS X 10.11 El Capitan Ruby 2.3.1 Ruby on Rails 4.2.6 発生している問題・エラーメッセージ ECサ

  • 解決済

    Ruby on Railsでの任意カラムのテーブル結合

    Ruby on rails4、MySQLにて開発しております。 以下のようなテーブルの結合を行いたいと思っているのですが、うまくいきません。 class CreateAAAtb

  • 解決済

    insert(インサート)が反映されません。

    javaからインサート文を実行するのですが、データベースに反映されていません。 どこが間違っているかご教授お願いいたします。 コードJSP <%@ page language=

  • 解決済

    rails validateについて

     前提・実現したいこと 投稿の際に昨日以前に日付設定した場合に投稿できないように機能を実装したい。 railsで指定した日付以降に開ける投稿アプリを作っています。 上記の機能を

  • 解決済

    フォーム内、eachで複数データ記録。

    ecサイトのオーダーフォームを作っているのですが、調べてもわからない点があるので質問させていただきます。 現在作っているものは、カートに商品を入れて、そこから注文情報の入力(オ

同じタグがついた質問を見る

  • Ruby

    6575questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。