質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

例外処理

例外処理(Exception handling)とは、プログラム実行中に異常が発生した場合、通常フローから外れ、例外として別の処理を行うようにデザインされたプログラミング言語構造です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

1回答

881閲覧

ActionView::Template::Errorに対する処理

tRyu

総合スコア10

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

例外処理

例外処理(Exception handling)とは、プログラム実行中に異常が発生した場合、通常フローから外れ、例外として別の処理を行うようにデザインされたプログラミング言語構造です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2020/05/15 01:48

前提・実現したいこと

楽天市場商品検索、Yahoo shopping商品検索APIを利用し、ほぼ安ネットのようなWebアプリを作っています。
検索機能実装についてはうまく完成したのですが、
エラーが発生した際の挙動を例外処理で捕捉し動作を停止させ、rootに戻したいのですがうまくいかず詰まっています。

なにかアドバイスがありましたらいただきたいです。

発生している問題・エラーメッセージ

例)① 商品名 aなど間に半角スペースを挟んだ時、
HTTPステータスコードが400

{ "error": "wrong_parameter", "error_description": "keyword parameter is not valid" }

楽天Developers
https://webservice.rakuten.co.jp/api/ichibaitemsearch/#aboutError

例)② 健康食品というワードをsort(価格が安い順)したときに発生
params{"keyword"=>"健康食品", "page"=>"1", "commit"=>"安い順",}

undefined method `[]' for nil:NilClass

②はURLに直接パラメータを入力したらきちんと結果が表示されます。(謎)

該当のソースコード

rails

1 2# application_controller.rb 3case params[:commit] 4when "安い順" 5 @sort_r = "+itemPrice" 6 @sort_y = "+price" 7when "レビュー件数順" 8 @sort_r = "-reviewCount" 9 @sort_y = "-review_count" 10when "レビュー平均順" 11 @sort_r = "-reviewAverage" 12 @sort_y = "-score" 13else 14 @sort_r = "standard" 15 @sort_y = "-score" 16end 17@rakutenitem = RakutenWebService::Ichiba::Item.search(keyword: params[:keyword], page: @page, sort: @sort_r) 18@yahooitem = [] 19res = Yahoo::Api.get(Yahoo::Api::Shopping::ItemSearch, 20 {query: params[:keyword], offset: @page, sort: @sort_y, hits: "30", availability: "1"}) 21unless res["ResultSet"]["totalResultsReturned"] == "0" 22 res["ResultSet"]["totalResultsReturned"].times do |i| 23 @yahooitem.push(res["ResultSet"]["0"]["Result"]["#{i}"]) 24 end 25end

試したこと

rails

1begin 2 @rakutenitem = RakutenWebService::Ichiba::Item.search(keyword: params[:keyword], page: 3@page, sort: @sort_r) 4 @yahooitem = [] 5 res = Yahoo::Api.get(Yahoo::Api::Shopping::ItemSearch, 6 {query: params[:keyword], offset: @page, sort: @sort_y, hits: "30", availability: "1"}) 7 unless res["ResultSet"]["totalResultsReturned"] == "0" 8 res["ResultSet"]["totalResultsReturned"].times do |i| 9 @yahooitem.push(res["ResultSet"]["0"]["Result"]["#{i}"]) 10 end 11 end 12rescue 13 flash[:danger] = "エラー発生" 14 redirect_to root_url 15end 16

例外処理について知識が浅く、調べながら進めています。

補足情報(FW/ツールのバージョンなど)

開発環境 cloud9
言語   rails 5.1.6

使用gem
rakuten_web_service ~> 1.4.1
gem 'yahoo-api'

初学者です。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

例外のメッセージだけからだと判断が問題の難しいです。
おそらく例外が発生した時に、Railsのログにバックトレース(コード中のどこでエラーや例外が起きたのか)といった情報が出ていると思います。
logs/development.logファイルの中でどういったバックトレースが出ているのか確認してはいかがでしょうか。

投稿2020/05/31 06:12

satoryu

総合スコア47

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tRyu

2020/05/31 06:28

返答ありがとうございます! こちらでよろしいでしょうか? ActionView::Template::Error - keyword is not valid: Started POST "/__better_errors/67dadb80a0cd3893/variables" for 42.83.63.150 at 2020-05-31 06:23:01 +0000 Cannot render console from 42.83.63.150! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
satoryu

2020/05/31 06:40

そこでは無いですね。ちなみに、その部分は、better_errorsのログです。 上に貼り付けてくれたコードが書かれているアクションに対応するURLのログがあると思います。 > Started GET "/hogehoge" みたいな。
tRyu

2020/05/31 12:06

こちらでしょうか? 最初にコメントにあげた上の文章の前部分です Started GET "/?utf8=%E2%9C%93&keyword=a&page=1&commit=%E6%A4%9C%E7%B4%A2" for 42.83.63.150 at 2020-05-31 12:02:28 +0000 Cannot render console from 42.83.63.150! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255 Processing by GoodsController#search as HTML Parameters: {"utf8"=>"✓", "keyword"=>"a", "page"=>"1", "commit"=>"検索"} Rendering goods/search.html.erb within layouts/application Rendered shared/_flash.html.erb (0.3ms) Rendered goods/search.html.erb within layouts/application (73.7ms) Completed 500 Internal Server Error in 843ms (ActiveRecord: 0.0ms) ちなみに例②であげたエラーのlogは下になります Started GET "/?utf8=%E2%9C%93&keyword=%E5%81%A5%E5%BA%B7%E9%A3%9F%E5%93%81&page=1&commit=%E5%AE%89%E3%81%84%E9%A0%86" for 42.83.63.150 at 2020-05-31 12:04:57 +0000 Cannot render console from 42.83.63.150! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255 Processing by GoodsController#search as HTML Parameters: {"utf8"=>"✓", "keyword"=>"健康食品", "page"=>"1", "commit"=>"安い順"} Rendering goods/search.html.erb within layouts/application Rendered shared/_flash.html.erb (0.3ms) Rendered goods/search.html.erb within layouts/application (675.0ms) Completed 500 Internal Server Error in 937ms (ActiveRecord: 0.0ms)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問