Estoy tratando de permitir que un usuario busque a través de una API, pero obtengo el siguiente error:

"No se pudo encontrar el juego sin una identificación"

Aquí está mi controlador:

class GamesController < ApplicationController

  def index
    @games = Game.all
  end

  def create
    @game = Game.new(game_params)
  end

  def show
  end

  def search
    @games = Game.find(params[:id])
    game = GiantBomb::Game.name
  end

  def new
    @game = Game.new
  end

  def edit
  end

private

  def game_params
    params.require(:game).permit(:name)
  end
end

Mis rutas:

Rails.application.routes.draw do
  devise_for :users
  resources :games
  root to: 'pages#home'
  post '/search', to: 'games#search', as: :search
end

Creo que es poco probable que mi formulario de búsqueda esté causando el error, pero aquí está de todos modos:

<div class="col-md-12">
          <%= form_tag search_path class: "row", method: :get do %>
          <div class="col-12 col-sm pr-sm-0">
            <%= text_field_tag :game,
              params[:game],
              class: "form-control input-lg",
              id: "typed-text" %>
          </div>
          <div class="input-group-btn ml-3">
            <%= submit_tag "Search", class: "btn btn-primary" %>
          </div>
          <% end %>

¿Necesito modificar mis rutas o hay algún problema con la forma en que escribí el controlador?

1
SJK 29 oct. 2020 a las 16:53

1 respuesta

La mejor respuesta

Entonces está recibiendo ese error porque params[:id] no existe cuando está llegando al método def search. Llamar a .find en algo siempre resultará en una excepción a menos que se encuentre algo. Si esto es así, entonces genial; de lo contrario, cámbialo a .find_by id: params[:id]. Esto haría que su variable @games fuera nula.

Creo que estás intentando buscar en params[:game]. En cuyo caso, es posible que deba usar @games = Game.find_by game: params[:game]

Puede ver qué parámetros se están pasando a su método en sus registros ... pero puede valer la pena adjuntar un depurador; como byebug en la parte superior de su método para que pueda ver qué parámetros están presentes.

1
ThorTL67 29 oct. 2020 a las 14:53