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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

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

Q&A

1回答

1299閲覧

ランキングの表示の仕方

takeke

総合スコア60

Ruby

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

0グッド

0クリップ

投稿2018/05/12 03:46

編集2018/05/12 09:05

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

やりたいことは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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

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


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

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

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

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

投稿2018/05/12 06:15

BeatStar

総合スコア4958

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takeke

2018/05/12 06:49

回答ありがとうございます!わかりずらくて申し訳ないです。始めたばかりなのですが文字制限あったのでどこまでデータ添付したらいいかと思いかなり省略してしまいました、、、 total_countはメソッドです。productとline_itemモデルに書きました line_itemsは中間テーブルです。ここに商品id(product_id)と購入数(quantity)があります なので、質問内容は、メソッドで出した数値を並び替えられるか?ということになります! 調べてみてはいるのですがカラムの数値を並び替える記事はたくさんあったのですが、メソッドからのものは見つからないので質問させていただきました。 必要なデータなどありましたら用意しますので、またよろしくお願いしますm(._.)m
BeatStar

2018/05/12 07:17

"質問本文に" 情報を記述してください。( "編集"ボタンで可能だと思う。 ) 私だけじゃなくて他の回答者も読みますから。 というか、質問文と質問者さんのreplyを再度読み直してみてください。 たぶん「意味不明だわ!」ってなると思います。 まずproduct, line_item, line_itemsの関係性や、持っているメンバ (フィールド,メソッド) がわかりにくい。もしかしたら一般的な組み方と質問者さんの組み方がぜんぜん違うかもしれない。 これではわかるわけがありません。 字数制限はありますが、記述して「100文字で収めましょう」みたいな感じで提示されたらそれで削りましょう。 せめて // int id, String name というフィールドを持った productがあるとする みたいなコメントでもいいから載せて。 で、どうしても削れないならサイトは忘れましたが、コードを載せてアップするサイトがあった気がします。それを利用するとか、 プロジェクト一式をzipファイルに圧縮してアップロードサイトにアップして...とか。 情報は命です。
takeke

2018/05/12 09:09

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問