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

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

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

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

Q&A

解決済

2回答

496閲覧

RailsでぐるなびAPIを利用したい

AK12

総合スコア32

Ruby on Rails 5

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

0グッド

0クリップ

投稿2019/07/23 06:39

###困っている点
Railsでアプリを作成中です。
ぐるなびAPIを利用したお店検索をしようとおもっており、検索そのものはできたのですが、
そのページで更新をかけるとエラーがでてしまいます。

以下の状況だと、検索後のページが
「/restaurants/search」となり、
The action 'show' could not be found for RestaurantsControllerというエラーが出てしまいます。

他のポートフォリオと見比べると、
?から始まって検索に利用したワードが並ぶような感じになっており、更新してもエラーはでないようなのですが、
その形にはどうやればなるのでしょうか。

外部APIを利用したそもそもの記載の仕方が誤っているのかもしれませんが、
ご存知の方おられましたら、よろしくお願い致します。

routes.rb

resources :restaurants do collection do post :search end end

app/views/restaurants/index.html.slim

.row .col-md-4.col-md-offset-4 = form_with url: search_restaurants_path,local: true do |f| = f.text_field :name, placeholder: "お店名を入力", class: 'form-control' = f.text_field :freeword1, placeholder: "キーワード", class: 'form-control' = f.text_field :freeword2, placeholder: "キーワード", class: 'form-control' = f.submit "検索", class: "btn btn-primary"

app/controllers/restaurants_controller.rb

def search freeword = %W[#{params[:freeword1]} #{params[:freeword2]}].join(',') hairetu = { keyid: ENV['GNAVI_API_KEY'], name: params[:name], freeword: freeword } require 'net/http' require 'uri' require 'json' require 'logger' require 'dotenv' require 'active_support' require 'active_support/core_ext' # attr_accessor :freeword logger = Logger.new('./webapi.log') # key = ENV['GNAVI_API_KEY'] # key = 'eeaec53f40fbe0b0f103d3dc86b1d94b' params = URI.encode_www_form(hairetu) uri = URI.parse("https://api.gnavi.co.jp/RestSearchAPI/v3/?#{params}") begin response = Net::HTTP.new(uri.host, uri.port).yield_self do |http| http.use_ssl = true http.open_timeout = 5 http.read_timeout = 30 http.get(uri.request_uri) end case response when Net::HTTPSuccess hash = JSON.parse(response.body, symbolize_names: true) @hash = hash[:rest] # puts @hash ["rest"][0]["name"] # puts @hash ["rest"][2]["name"] when Net::HTTPRedirection logger.warn("Redirection: code=#{response.code} message=#{response.message}") else logger.error("HTTP ERROR: code=#{response.code} message=#{response.message}") end rescue IOError => e logger.error(e.message) rescue TimeoutError => e logger.error(e.message) rescue JSON::ParserError => e logger.error(e.message) rescue StandardError => e logger.error(e.message) end end

app/views/restaurants/search.html.slim

- @hash.each do |rest| .post .row .col-xs-12 p = rest[:name] .row .col-xs-3 = image_tag rest[:image_url][:shop_image1] , class: 'img-responsive center-block' .col-xs-9 li = rest[:opentime] li = rest[:holiday] li = rest[:pr][:pr_short] li = link_to '詳細はこちら', rest[:url]

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

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

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

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

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

winterboum

2019/07/23 08:46

> そのページで更新をかけるとエラーがでてしまいます。 >以下の状況だと、検索後のページが そのページ と 検索後のページ のviewを見せて下さい。 あと、restaurants_controller.rb に searchしかないですが、それが全部ですか?
AK12

2019/07/23 09:50

ご回答ありがとうございます。 そのページと検索後のページは同じです。 app/views/restaurants/search.html.slimがその内容になります。 restaurants_controller.rbは、searchしか今の所書いていないです。
winterboum

2019/07/23 12:11

>そのページで更新をかけると  とありますが、「更新を掛ける」というのは具体的にはどういう操作ですか?
AK12

2019/07/23 12:54

ブラウザの更新を行いました。 更新ボタンを押したり、win + Rをしたこともあります。
guest

回答2

0

自己解決

こちら解決いたしました。
formでmethod: :getが抜けておりました。

投稿2019/07/29 14:01

AK12

総合スコア32

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

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

0

>The action 'show' could not be found for RestaurantsControllerというエラー

だけから判断すると、restaurants_controller.rb に show  が作られていない、ということなのですが、必要なfileが開示されていないので、推測止まりです。
追加修正依頼に書いたfileを開示してください

投稿2019/07/23 08:48

winterboum

総合スコア23329

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問