質問編集履歴
8
追記 part3
title
CHANGED
File without changes
|
body
CHANGED
@@ -238,4 +238,17 @@
|
|
238
238
|
```
|
239
239
|
|
240
240
|
ただ、まだ検索結果のビューでは、@production_resulはnilclassになってしまいますね、、、。
|
241
|
-
うまく変数が渡せていないだけだと思うのですが、、、。
|
241
|
+
うまく変数が渡せていないだけだと思うのですが、、、。
|
242
|
+
|
243
|
+
### 追記 part3
|
244
|
+
なんとか解決しました。
|
245
|
+
ビューの方の表記を変えたところきちんと検索結果が表示されました。
|
246
|
+
```html
|
247
|
+
間違い
|
248
|
+
<%= @production_result.date %>
|
249
|
+
|
250
|
+
正解
|
251
|
+
<%= (@production_result.to_a)[0].date %>
|
252
|
+
```
|
253
|
+
|
254
|
+
また、asmさんのアドバイス通りwhereでなく、find_byを使えば@production_result.dateという形でも取り出せます。whereやfind_byの違いや原理を理解していないのがエラーにハマった原因でした。
|
7
誤字の修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -220,11 +220,7 @@
|
|
220
220
|
### 追記 part2
|
221
221
|
上記の状況から進展がありました。
|
222
222
|
@production_resultがnilになってしまうのはproduct_idの指定の仕方が間違えていたことによるものでした。
|
223
|
-
上の方にも書いた通り、product_idは他のテーブルに値を探しにいって変数product_idに入れて、searchメソッドに渡しています。その時にフォームから直接受け取ったgroup_idは"1"となっていたのに対し、product_idは 1 となっていました。そのため、そのまま、product_idを検索条件に入れてしまうと、条件に引っかからず、検索結果が0となり、
|
224
|
-
[1] pry(#<Productions::SearchesController>)> product_id
|
225
|
-
=> 1
|
226
|
-
[2] pry(#<Productions::SearchesController>)> params[:production][:group_id]
|
227
|
-
=> "1"がnilになっているのでしたそこで下記のように、searchメソッドを書き直したところ、きちんと検索結果が、@production_resultに入ってくれました。
|
223
|
+
上の方にも書いた通り、product_idは他のテーブルに値を探しにいって変数product_idに入れて、searchメソッドに渡しています。その時にフォームから直接受け取ったgroup_idは"1"となっていたのに対し、product_idは 1 となっていました。そのため、そのまま、product_idを検索条件に入れてしまうと、条件に引っかからず、検索結果が0となり、@production_resulがnilになっているのでしたそこで下記のように、searchメソッドを書き直したところ、きちんと検索結果が、@production_resultに入ってくれました。
|
228
224
|
|
229
225
|
```ruby
|
230
226
|
#production.rb
|
6
追記 part2
title
CHANGED
File without changes
|
body
CHANGED
@@ -215,4 +215,31 @@
|
|
215
215
|
| 26 | 2019-12-13 00:00:00 | 1 | 1 |
|
216
216
|
|
217
217
|
### 試したこと
|
218
|
-
binding pryをしてみたところ、seaechメソッドをすると@production_resultが[]となってしまいます。
|
218
|
+
binding pryをしてみたところ、seaechメソッドをすると@production_resultが[]となってしまいます。
|
219
|
+
|
220
|
+
### 追記 part2
|
221
|
+
上記の状況から進展がありました。
|
222
|
+
@production_resultがnilになってしまうのはproduct_idの指定の仕方が間違えていたことによるものでした。
|
223
|
+
上の方にも書いた通り、product_idは他のテーブルに値を探しにいって変数product_idに入れて、searchメソッドに渡しています。その時にフォームから直接受け取ったgroup_idは"1"となっていたのに対し、product_idは 1 となっていました。そのため、そのまま、product_idを検索条件に入れてしまうと、条件に引っかからず、検索結果が0となり、```ruby
|
224
|
+
[1] pry(#<Productions::SearchesController>)> product_id
|
225
|
+
=> 1
|
226
|
+
[2] pry(#<Productions::SearchesController>)> params[:production][:group_id]
|
227
|
+
=> "1"がnilになっているのでしたそこで下記のように、searchメソッドを書き直したところ、きちんと検索結果が、@production_resultに入ってくれました。
|
228
|
+
|
229
|
+
```ruby
|
230
|
+
#production.rb
|
231
|
+
def self.search(date,line_id,product_id)
|
232
|
+
Production.where(date: date).
|
233
|
+
where(group_id: group_id).
|
234
|
+
where(product_id: "#{product_id}")
|
235
|
+
end
|
236
|
+
```
|
237
|
+
```ruby
|
238
|
+
[1] pry(#<Productions::SearchesController>)> product_id
|
239
|
+
=> 1 #こっちはただの数字
|
240
|
+
[2] pry(#<Productions::SearchesController>)> params[:production][:group_id]
|
241
|
+
=> "1" #こっちはダブルクォーテーションで囲まれている
|
242
|
+
```
|
243
|
+
|
244
|
+
ただ、まだ検索結果のビューでは、@production_resulはnilclassになってしまいますね、、、。
|
245
|
+
うまく変数が渡せていないだけだと思うのですが、、、。
|
5
誤字の修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -160,7 +160,7 @@
|
|
160
160
|
```ruby
|
161
161
|
#route.rb
|
162
162
|
Rails.application.routes.draw do
|
163
|
-
root '
|
163
|
+
root 'groups#index'
|
164
164
|
namespace :productions do
|
165
165
|
resources :searches, only: :index do
|
166
166
|
collection do
|
4
誤字の修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -182,7 +182,7 @@
|
|
182
182
|
def search
|
183
183
|
@production_result = Production.new
|
184
184
|
product_id = Product.find_by(code: params[:production][:product_id]).id
|
185
|
-
@production_result = Production.search(params[:production][:date], params[:production][:
|
185
|
+
@production_result = Production.search(params[:production][:date], params[:production][:group_id], product_id)
|
186
186
|
|
187
187
|
redirect_to result_productions_searches_path(@production_result)
|
188
188
|
end
|
@@ -193,9 +193,9 @@
|
|
193
193
|
```
|
194
194
|
```ruby
|
195
195
|
def self.search(date,line_id,product_id)
|
196
|
-
if date and
|
196
|
+
if date and group_id and product_id
|
197
197
|
Production.where
|
198
|
-
("(date = ?) AND (
|
198
|
+
("(date = ?) AND (group_id = ?) AND (product_id = ?)", "%#{date}%", "%#{group_id}%", "%#{product_id}%")
|
199
199
|
else
|
200
200
|
redirect_to productions_searches_path
|
201
201
|
end
|
3
誤字の修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -177,12 +177,6 @@
|
|
177
177
|
end
|
178
178
|
end
|
179
179
|
```
|
180
|
-
|
181
|
-
resources :groups do
|
182
|
-
resources :productions
|
183
|
-
end
|
184
|
-
end
|
185
|
-
|
186
180
|
```ruby
|
187
181
|
#/controllers/productions/searches_controller.rb
|
188
182
|
def search
|
2
コメントを受けて追記
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
[Ruby on Rails]複数条件でAND検索したい
|
1
|
+
[Ruby on Rails]複数条件でAND検索し、その結果をビューで表示させたい
|
body
CHANGED
@@ -143,4 +143,82 @@
|
|
143
143
|
### 補足情報(FW/ツールのバージョンなど)
|
144
144
|
|
145
145
|
rails 5.0.7
|
146
|
-
ruby 2.5.1
|
146
|
+
ruby 2.5.1
|
147
|
+
|
148
|
+
### 追記
|
149
|
+
コメントで指摘を受けた部分を変更しました。
|
150
|
+
それに加えて、resultアクションを追加して、@production_resultに検索結果を挿入し、resultアクションで検索結果を表示させるようにしました。
|
151
|
+
しかし、@production_resultがnilになってしまい検索結果が表示されません。
|
152
|
+
どうもsearchメソッドを使用すると、@production_resultがから([])となってしまいます。
|
153
|
+
これは、検索結果がないということなのでしょうか?配列の中の値がnilとして返ってくるのならわかるのですが、配列自体が空になってしまいます。まだ、searchメソッドの記述がおかしいのでしょうか。
|
154
|
+
下記はsearchメソッドを使用した後、binding pryで確かめた結果です。
|
155
|
+
```
|
156
|
+
[1] pry(Production)> @production_result
|
157
|
+
=> nil
|
158
|
+
```
|
159
|
+
|
160
|
+
```ruby
|
161
|
+
#route.rb
|
162
|
+
Rails.application.routes.draw do
|
163
|
+
root 'lines#index'
|
164
|
+
namespace :productions do
|
165
|
+
resources :searches, only: :index do
|
166
|
+
collection do
|
167
|
+
get 'search'
|
168
|
+
end
|
169
|
+
collection do
|
170
|
+
get 'result'
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
resources :groups do
|
176
|
+
resources :productions
|
177
|
+
end
|
178
|
+
end
|
179
|
+
```
|
180
|
+
|
181
|
+
resources :groups do
|
182
|
+
resources :productions
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
```ruby
|
187
|
+
#/controllers/productions/searches_controller.rb
|
188
|
+
def search
|
189
|
+
@production_result = Production.new
|
190
|
+
product_id = Product.find_by(code: params[:production][:product_id]).id
|
191
|
+
@production_result = Production.search(params[:production][:date], params[:production][:line_id], product_id)
|
192
|
+
|
193
|
+
redirect_to result_productions_searches_path(@production_result)
|
194
|
+
end
|
195
|
+
|
196
|
+
def result
|
197
|
+
|
198
|
+
end
|
199
|
+
```
|
200
|
+
```ruby
|
201
|
+
def self.search(date,line_id,product_id)
|
202
|
+
if date and line_id and product_id
|
203
|
+
Production.where
|
204
|
+
("(date = ?) AND (line_id = ?) AND (product_id = ?)", "%#{date}%", "%#{line_id}%", "%#{product_id}%")
|
205
|
+
else
|
206
|
+
redirect_to productions_searches_path
|
207
|
+
end
|
208
|
+
end
|
209
|
+
```
|
210
|
+
|
211
|
+
```html
|
212
|
+
-#views/productions/searches/result.html
|
213
|
+
検索結果
|
214
|
+
<%= @production_result.date %>
|
215
|
+
<%= @production_result.group_id %>
|
216
|
+
<%= @production_result.product_id %>
|
217
|
+
```
|
218
|
+
|
219
|
+
| id | date | group_id | product_id |
|
220
|
+
| ---- | ---- | ---- | ---- |
|
221
|
+
| 26 | 2019-12-13 00:00:00 | 1 | 1 |
|
222
|
+
|
223
|
+
### 試したこと
|
224
|
+
binding pryをしてみたところ、seaechメソッドをすると@production_resultが[]となってしまいます。
|
1
誤字の修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -90,7 +90,7 @@
|
|
90
90
|
<div class="form__info__date">
|
91
91
|
<%= f.date_field :date %> #日付の入力
|
92
92
|
<%= f.number_field :products_id %> #productsのid(数字)を入力
|
93
|
-
<%= f.select :group_id, [["
|
93
|
+
<%= f.select :group_id, [["グループ1", 1],["グループ2", 2]] %> #グループidの入力
|
94
94
|
<%= f.submit '検索', class: "btn" %>
|
95
95
|
</div>
|
96
96
|
<% end %>
|