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

質問編集履歴

8

追記 part3

2019/12/14 12:37

投稿

clora
clora

スコア72

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

誤字の修正

2019/12/14 12:37

投稿

clora
clora

スコア72

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となり、```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に入ってくれました。
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

2019/12/14 11:51

投稿

clora
clora

スコア72

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

誤字の修正

2019/12/14 11:50

投稿

clora
clora

スコア72

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 'lines#index'
163
+ root 'groups#index'
164
164
  namespace :productions do
165
165
  resources :searches, only: :index do
166
166
  collection do

4

誤字の修正

2019/12/14 06:47

投稿

clora
clora

スコア72

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][:line_id], product_id)
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 line_id and product_id
196
+ if date and group_id and product_id
197
197
  Production.where
198
- ("(date = ?) AND (line_id = ?) AND (product_id = ?)", "%#{date}%", "%#{line_id}%", "%#{product_id}%")
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

誤字の修正

2019/12/14 06:46

投稿

clora
clora

スコア72

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

コメントを受けて追記

2019/12/14 06:44

投稿

clora
clora

スコア72

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

誤字の修正

2019/12/14 06:42

投稿

clora
clora

スコア72

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, [["8F-16", 1],["8F-9", 2]] %> #グループidの入力
93
+ <%= f.select :group_id, [["グループ1", 1],["グループ2", 2]] %> #グループidの入力
94
94
  <%= f.submit '検索', class: "btn" %>
95
95
  </div>
96
96
  <% end %>