質問編集履歴

6

DBログの追加

2017/05/07 06:53

投稿

Aihara
Aihara

スコア24

test CHANGED
File without changes
test CHANGED
@@ -172,4 +172,44 @@
172
172
 
173
173
 
174
174
 
175
+ (ログを見てみる)
176
+
177
+ ```
178
+
179
+ SQL (3.3ms) SELECT DISTINCT "restaurants"."id", menus.price AS alias_0 FROM "restaurants" LEFT OUTER JOIN "menus" ON "menus"."restaurant_id" = "restaurants"."id" AND "menus"."data_status" = $1 WHERE "restaurants"."data_status" = $2 ORDER BY menus.price ASC LIMIT 10 OFFSET 0 [["data_status", "active"], ["data_status", "active"]]
180
+
181
+  (3.2ms) SELECT COUNT(DISTINCT "restaurants"."id") FROM "restaurants" LEFT OUTER JOIN "menus" ON "menus"."restaurant_id" = "restaurants"."id" AND "menus"."data_status" = $1 WHERE "restaurants"."data_status" = $2 AND "restaurants"."id" IN (13, 4, 5, 10, 17, 2, 6, 18, 6, 5) [["data_status", "active"], ["data_status", "active"]]
182
+
183
+  (3.1ms) SELECT COUNT(DISTINCT "restaurants"."id") FROM "restaurants" LEFT OUTER JOIN "menus" ON "menus"."restaurant_id" = "restaurants"."id" AND "menus"."data_status" = $1 WHERE "restaurants"."data_status" = $2 [["data_status", "active"], ["data_status", "active"]]
184
+
185
+ CACHE (0.0ms) SELECT DISTINCT "restaurants"."id", menus.price AS alias_0 FROM "restaurants" LEFT OUTER JOIN "menus" ON "menus"."restaurant_id" = "restaurants"."id" AND "menus"."data_status" = $1 WHERE "restaurants"."data_status" = $2 ORDER BY menus.price ASC LIMIT 10 OFFSET 0 [["data_status", "active"], ["data_status", "active"]]
186
+
187
+ ```
188
+
189
+ 以上のようなログが出ているのですが
190
+
191
+ ```
192
+
193
+ ORDER BY menus.price
194
+
195
+ ```
196
+
197
+ これが入っていると
198
+
199
+ ```
200
+
201
+ "restaurants"."id" IN (13, 4, 5, 10, 17, 2, 6, 18, 6, 5)
202
+
203
+ ```
204
+
205
+ これが入るのですが、なぜここで5,6が重複してしまうのでしょうか。
206
+
207
+ これが原因で、10件表示としているにもかかわらず8件しか出ない、というようになっていると思います。
208
+
209
+ 並び順を指定するだけで重複するようなことになってしまうのが、よく分かりません。。。
210
+
211
+
212
+
213
+
214
+
175
215
  宜しくお願い致します。

5

エラーの説明追加

2017/05/07 06:53

投稿

Aihara
Aihara

スコア24

test CHANGED
File without changes
test CHANGED
@@ -164,6 +164,12 @@
164
164
 
165
165
 
166
166
 
167
+ また、1ページあたり100と極端に設定すると
168
+
169
+ DBに入ってある19つのレストランが全て表示されます。
170
+
171
+ 不可解です。。
172
+
167
173
 
168
174
 
169
175
  宜しくお願い致します。

4

エラー部分の説明を書き足しました。

2017/05/05 13:23

投稿

Aihara
Aihara

スコア24

test CHANGED
File without changes
test CHANGED
@@ -140,4 +140,30 @@
140
140
 
141
141
 
142
142
 
143
+
144
+
145
+ (書き忘れ)
146
+
147
+ kaminariで表示する検索結果の文言についてです。
148
+
149
+ page_entries_info
150
+
151
+ というヘルパーメソッドで検索結果の数について表示をしてくれるのですが
152
+
153
+ そこで
154
+
155
+ 「19つの全てのレストランを表示しています」と出ているにもかかわらず
156
+
157
+ 1ページあたり10つを表示と設定してあるページに
158
+
159
+ 8つしかレストランが表示されません。
160
+
161
+ データを取り出す部分と、kaminariと
162
+
163
+ 両方ともにおかしいところがあるのではないかと思っております。
164
+
165
+
166
+
167
+
168
+
143
169
  宜しくお願い致します。

3

プログラムコードが間違っていました。。。

2017/05/05 13:18

投稿

Aihara
Aihara

スコア24

test CHANGED
File without changes
test CHANGED
@@ -122,9 +122,9 @@
122
122
 
123
123
  scope :sort, -> (sort) {
124
124
 
125
- if sort.present? && sort == "popular"
125
+ if sort.present? && sort == "price"
126
126
 
127
- order("restaurants.pickup desc")
127
+ order("menus.price asc, restaurants.pickup desc")
128
128
 
129
129
  end
130
130
 

2

プログラムが間違っていたので修正

2017/05/05 02:07

投稿

Aihara
Aihara

スコア24

test CHANGED
File without changes
test CHANGED
@@ -76,7 +76,7 @@
76
76
 
77
77
  ```ここに言語を入力
78
78
 
79
- @restaurants = Restaurant.where(:data_status => "active").genre(params[:genre]).area(params[:area]).includes(:restaurant_imgs, :menus).where(restaurant_imgs: {size: "normal"}).order("menus.price asc").page(@page).per(10)
79
+ @restaurants = Restaurant.where(:data_status => "active").genre(params[:genre]).area(params[:area]).includes(:restaurant_imgs, :menus).where(restaurant_imgs: {size: "normal"}).sort(params[:sort]).page(@page).per(10)
80
80
 
81
81
  ```
82
82
 

1

余計な部分を省きました\(1回目\)

2017/05/02 11:42

投稿

Aihara
Aihara

スコア24

test CHANGED
File without changes
test CHANGED
@@ -122,15 +122,7 @@
122
122
 
123
123
  scope :sort, -> (sort) {
124
124
 
125
- if sort.present? && sort == "michelin"
126
-
127
- order("restaurants.rank DESC, restaurants.pickup desc")
128
-
129
- elsif sort.present? && sort == "price"
130
-
131
- order("menus.price asc, restaurants.pickup desc")
132
-
133
- elsif sort.present? && sort == "popular"
125
+ if sort.present? && sort == "popular"
134
126
 
135
127
  order("restaurants.pickup desc")
136
128