###困っている点
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]
回答2件
あなたの回答
tips
プレビュー