teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

まだ足りないかもしれないですが、修正致しました。

2022/01/10 07:40

投稿

kentausui
kentausui

スコア1

title CHANGED
File without changes
body CHANGED
@@ -2,9 +2,11 @@
2
2
 
3
3
  railsで練習としてECサイトを作っている初心者です。
4
4
  その中で販売数に応じたランキング機能を実装したいと思っています。
5
+ order_itemsテーブルのquantity(販売数)が多い順にItemデータを取得したいです。
5
6
 
6
- order_itemsテブルのquantity(販売数)が多い順並び替えたいのですが、
7
+ 現状はitemコントロラindexアクションてItemデータ取得はきていますが、
7
- コントローラでコードがうまくかけず、orderが効いてないようなのでご質問ていただきした
8
+ ItemPK(id)昇順データ取得ていま
9
+
8
10
  初質問で不手際もあるかと思いますが、何卒よろしくお願い致します。
9
11
 
10
12
  ```table
@@ -31,12 +33,13 @@
31
33
  ### 発生している問題・エラーメッセージ
32
34
 
33
35
  ```
34
- エラーは出ないが、並び替えがうまくかない
36
+ Itemデタを取得できるが、ItemのPK(id)の昇順でデータ取得されて
37
+ Itemデータの取得をOrder_itemのquantityが多い順に(降順)取得したいです。
35
38
  ```
36
39
 
37
40
  ### 該当のソースコード
38
41
 
39
- ```controller
42
+ ```Itemcontroller
40
43
  def index
41
44
  @items = Item.preload(:comments).all.page(params[:page]).per(8)
42
45
  # order_itemsのquentity(量)が多い商品ベスト3(販売数の多い商品ランキング)
@@ -44,7 +47,7 @@
44
47
  end
45
48
  ```
46
49
 
47
- ```viewindex
50
+ ```viewItemIndex
48
51
  <div class="row my-2">
49
52
  <h4 class="mx-auto">人気商品ベスト3</h4>
50
53
  </div>
@@ -80,8 +83,15 @@
80
83
 
81
84
  ### 試したこと
82
85
 
86
+ ●最初はfindで実装しようと思いましたが、order_itemテーブルにitem_idカラムをつけていなかったため、実現できませんでした。そのため、whereメソッドを用いて
87
+ @items_rank = Item.where(name: OrderItem.group(:name).order(quantity: "DESC").pluck(:name))
88
+ と書いています。
89
+
83
90
  コンソールにてOrderItem.group(:name).order(quantity: "DESC").pluck(:name))を実行して、並び順が販売数(quantity)が多い順になっているのを確認しました。
84
91
 
92
+ テーブル設計でorder_itemにitem_idカラムを追加すればランキング機能を実装できるのですが、現状で解決できる方法はないかと思い質問させていただきました。
93
+
94
+
85
95
  参照した記事
86
96
  https://qiita.com/mitsumitsu1128/items/18fa5e49a27e727f00b4
87
97