質問編集履歴

1

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

2022/01/10 07:40

投稿

kentausui
kentausui

スコア1

test CHANGED
File without changes
test CHANGED
@@ -6,11 +6,15 @@
6
6
 
7
7
  その中で販売数に応じたランキング機能を実装したいと思っています。
8
8
 
9
-
10
-
11
- order_itemsテーブルのquantity(販売数)が多い順に並び替えたいですが、
9
+ order_itemsテーブルのquantity(販売数)が多い順にItemデータを取得したいです
12
-
10
+
11
+
12
+
13
- コントローラでのコードがうまくかけず、orderが効いないようなのでご質問させていただきした。
13
+ 現状はitemコントローラindexアクションにItemデータ取得はていますが、
14
+
15
+ ItemのPK(id)の昇順でデータ取得されています。
16
+
17
+
14
18
 
15
19
  初質問で不手際もあるかと思いますが、何卒よろしくお願い致します。
16
20
 
@@ -64,7 +68,9 @@
64
68
 
65
69
  ```
66
70
 
67
- エラーは出ないが、並び替えがうまくかない
71
+ Itemデタを取得できるが、ItemのPK(id)の昇順でデータ取得されて
72
+
73
+ Itemデータの取得をOrder_itemのquantityが多い順に(降順)取得したいです。
68
74
 
69
75
  ```
70
76
 
@@ -74,7 +80,7 @@
74
80
 
75
81
 
76
82
 
77
- ```controller
83
+ ```Itemcontroller
78
84
 
79
85
  def index
80
86
 
@@ -90,7 +96,7 @@
90
96
 
91
97
 
92
98
 
93
- ```viewindex
99
+ ```viewItemIndex
94
100
 
95
101
  <div class="row my-2">
96
102
 
@@ -162,10 +168,24 @@
162
168
 
163
169
 
164
170
 
171
+ ●最初はfindで実装しようと思いましたが、order_itemテーブルにitem_idカラムをつけていなかったため、実現できませんでした。そのため、whereメソッドを用いて
172
+
173
+ @items_rank = Item.where(name: OrderItem.group(:name).order(quantity: "DESC").pluck(:name))
174
+
175
+ と書いています。
176
+
177
+
178
+
165
179
  コンソールにてOrderItem.group(:name).order(quantity: "DESC").pluck(:name))を実行して、並び順が販売数(quantity)が多い順になっているのを確認しました。
166
180
 
167
181
 
168
182
 
183
+ テーブル設計でorder_itemにitem_idカラムを追加すればランキング機能を実装できるのですが、現状で解決できる方法はないかと思い質問させていただきました。
184
+
185
+
186
+
187
+
188
+
169
189
  参照した記事
170
190
 
171
191
  https://qiita.com/mitsumitsu1128/items/18fa5e49a27e727f00b4