前提
Railsでサッカー選手の検索できるように、実装しているのですが、viewで検索した選手のレスポンスが返ってきません。レスポンスが返ってくるように、実装するためにアドバイスを下さい。
実現したいこと
JSON::ParserError (859: unexpected token at ''):
searchアクションを実行して、上記のエラーを解決して、search viewに検索結果を表示したいです。
発生している問題・エラーメッセージ
Started GET "/players/search?season=2018&player_name=cavani&commit=%E6%A4%9C%E7%B4%A2" for ::1 at 2022-11-26 23:35:17 +0900 Processing by PlayersController#search as HTML Parameters: {"season"=>"2018", "player_name"=>"cavani", "commit"=>"検索"} Completed 500 Internal Server Error in 1520ms (ActiveRecord: 0.0ms | Allocations: 3193) JSON::ParserError (859: unexpected token at ''): app/controllers/players_controller.rb:75:in `search'
該当のソースコード
players_controller.rb
class PlayersController < ApplicationController require 'uri' require 'net/http' require 'openssl' require 'json' before_action :set_q, only: %i[search] def index @players = Player.all end def show end def edit end def update respond_to do |format| if @player.update(player_params) format.html { redirect_to player_url(@player), notice: "Player was successfully updated." } format.json { render :show, status: :ok, location: @player } else format.html { render :edit, status: :unprocessable_entity } format.json { render json: @player.errors, status: :unprocessable_entity } end end end # DELETE /players/1 or /players/1.json def destroy @player.destroy respond_to do |format| format.html { redirect_to players_url, notice: "Player was successfully destroyed." } format.json { head :no_content } end end def search url = URI.parse('https://api-football-v1.p.rapidapi.com/v3/players?team=85&search=cavani&season=2018') http = Net::HTTP.new(url.host, url.port) http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE request = Net::HTTP::Get.new(url) request["x-rapidapi-host"] = 'api-football-v1.p.rapidapi.com' #実際にはAPI KEYを記載してます。 request["x-rapidapi-key"] = 'API KEY' response = http.request(request) result = JSON.parse(response.body) @player = Player.new end private def set_q @q = User.ransack(params[:q]) end # Only allow a list of trusted parameters through. def player_params params.require(:player).permit(:player_name, :season) end def search_params params[:q]&.permit(:player_name, :season) end end
serach.html.erb
<div class="container"> <div class="row"> <div class="col-lg-8 offset-lg-2"> <div class="player"> <%= form_with url: search_players_path, method: :get, local: true do |f| %> <div class="form-group"> <%= f.text_field :season, class: 'form-control', placeholder: '西暦を入力してください(例: 1997)' %> <div class="search2 "> <%= f.text_field :player_name, class: 'form-control', placeholder: '選手名を入力してください' %> <%= f.submit '検索', class: 'btn btn-primary' %> </div> </div> <% if @players.present? %> <%= render 'players/player' %> <% end %> <% end %> </div> </div> </div> </div>
_player.html.erb
<div class="container"> <div class="row"> <div class="col-lg-8 offset-lg-2"> <h1>player</h1> <div> <% if @player.present? %> <table> <tr> <td>player_name</td> <td><%= @player["firstname"+"lastname"] %></td> </tr> <tr> <td>team</td> <td><%= @player["team"] %></td> </tr> <tr> <td>season</td> <td><%= @player["season"] %></td> </tr> </table> <% end %> </div> </div> </div> </div>
補足情報(FW/ツールのバージョンなど)
外部API:https://www.api-football.com/documentation-v3
Rails: 6.1.5
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/12/04 20:44 編集
2022/12/04 23:03
2022/12/10 06:52