前提・実現したいこと
railsで作成しているアプリケーション内で、concern置いているプログラムを通してデータベースにデータを保存したい。
発生している問題・エラーメッセージ
concern下のプログラムが動かず、viewでNoMethodErrorが発生しています。
NoMethodErrorのエラーコード
ActionView::Template::Error (undefined method `each' for nil:NilClass): 1: <head> 2: <meta http-equiv='refresh' content='10'> 3: </head> 4: <h1>title</h1> 6: <p> 7: <% @value.each do |rawdate| %> 8: [distance] <%= rawdate.distance %> 8: [time] <%= rawdate.time %><br> 9: <% end %> 10: <% @resultvalue.each do |result| %> 11: [ishuman] <%= result.ishuman %> 12: [iscar] <%= result.iscar %> 13: <% end %> app/views/address/show.html.erb:11 Showing D:/rails/application/app/views/address/show.html.erb where line #11 raised: undefined method `each' for nil:NilClass
調べた内容・試した内容
concern内のプログラムでresultテーブルにデータを入れたり、子クラスの中でrawdataテーブルからデータを取り出したりするプログラムを書きました。concern下のプログラムがcontroller内のinclude Processで動作してないと思われるためにviewでnomethoderrorが発生しています。
以下にcontrollerとconcern下に置かれているProcess.rbのプログラムを載せます。
該当のソースコード
controller
1require 'net/http' 2require 'net/https' 3require 'uri' 4require 'json' 5require 'date' 6 7class AddressController < ApplicationController 8 include Process 9 def show 10 params = URI.encode_www_form({token: 'token'}) 11 uri = URI.parse("https://api.sakura.io/datastore/v1/channels?#{params}") 12 13 @query = uri.query 14 puts "aaa" 15 response = Net::HTTP.start(uri.host, 16 use_ssl: true, verify_mode: OpenSSL::SSL::VERIFY_NONE, 17 open_timeout: 5 18 ){|https| https.get(uri.request_uri)} 19 20 begin 21 case response 22 # 成功した場合 23 when Net::HTTPSuccess 24 @result = JSON.parse(response.body) 25 for i in 0..99 do 26 @value = @result["results"][i]["value"] 27 cannel = @result["results"][i]["channel"] 28 if cannel == 0 then 29 Rawdate.create(:time => @value) 30 else 31 Rawdate.create(:distance => @value) 32 end 33 end 34 @size = @result["meta"]["count"] 35 @value = Rawdate.all 36 start_main() 37 calculation() 38 output() 39 40 when Net::HTTPRedirection 41 @message = "Redirection: code=#{response.code} message=#{response.message}" 42 # その他エラー 43 else 44 @message = "HTTP ERROR: code=#{response.code} message=#{response.message}" 45 end 46 # エラー時処理 47 rescue IOError => e 48 @message = e.message 49 rescue TimeoutError => e 50 @message = e.message 51 rescue JSON::ParserError => e 52 @message = e.message 53 rescue => e 54 @message = e.message 55 end 56 end 57end
Process
1module Process 2 3 extend ActiveSupport::Concern 4 5 require_relative 'read/read_main' 6 require_relative 'object_data/object_data' 7 require_relative 'number_data/number_data_main' 8 require_relative 'S_D_data/S_D_data_main' 9 require_relative 'transit_time/transit_data_main' 10 require_relative 'range_data/range_main' 11 require_relative 'count/count_main' 12 require_relative 'write/write_main' 13 14 def start_main 15 file_read = Read_main.new 16 write = Write_main.new 17 #p file_read.start_time 18 #p file_read.sensing_dis 19 #p file_read.data_cnt 20 p file_read.main 21 22 object_data = Object_data.new(file_read.main, file_read.data_cnt) 23 print "\n---------------object_data------------------\n" 24 #p object_data.main 25 object_data.drow 26 print "\n--------------------------------------------\n" 27 28 29 q_flag = 0 30 31 count = Count_main.new(object_data.main) 32 33 #p count.count_number #データの個数 34 #exit 35 end 36 37 def calculation 38 count.count_number.times do |i| 39 weight = 0 40 number_data = Number_main.new(object_data.main) 41 if number_data.weight(i).class == Float 42 weight += number_data.weight(i) 43 else 44 q_flag = 1 45 end 46 47 if q_flag == 0 48 s_d = S_D_main.new(object_data.main) 49 #p s_d.val(0) 50 #p s_d.weight(i) 51 if s_d.weight(i).class == Float 52 weight += s_d.weight(i) 53 else 54 q_flag = 1 55 end 56 end 57 58 if q_flag == 0 59 transit_time = Transit_main.new(object_data.main) 60 if transit_time.weight(i).class == Float 61 printf("weight: %f\n", transit_time.weight(i)) 62 weight += transit_time.weight(i) 63 else 64 printf("weight: ?\n") 65 q_flag = 1 66 end 67 end 68 69 if q_flag == 0 70 range = Range_main.new(object_data.main) 71 #p range.val(0) 72 if range.weight(i).class == Float 73 printf("range: %f\n", range.weight(i)) 74 weight += range.weight(i) 75 else 76 printf("range: ?\n") 77 q_flag = 1 78 end 79 end 80 81 82 if q_flag == 0 83 printf("sum: %f\n", weight) 84 else 85 printf("sum: ?\n") 86 end 87 88 write.count_car_or_human(weight,q_flag) 89 90 q_flag = 0 91 92 end 93 end 94 95 def output 96 printf("\n---------------------result------------------------\n") 97 Result.create(:ishuman => write.count_human) 98 Result.create(:iscar => write.count_car) 99 @resultvalue = Result.all 100 101 end 102end
補足情報(FW/ツールのバージョンなど)
ruby 2.6.5.p114
rails 6.0.2.1
sqlite3 3.30.1
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/18 06:21
2020/02/18 06:39
2020/02/18 06:48
2020/02/18 09:33
2020/02/18 10:44
2020/02/19 02:00
2020/02/19 03:16
2020/02/19 03:37
2020/02/19 04:56
2020/02/19 05:17
2020/02/19 08:26
2020/02/20 01:44
2020/02/20 01:47 編集
2020/02/20 02:59
2020/02/20 03:07
2020/02/20 05:29
2020/02/20 06:12
2020/02/20 07:23
2020/02/20 08:49
2020/02/20 08:57