【问题标题】:'Couldn't find Game without an ID' when searching搜索时“找不到没有 ID 的游戏”
【发布时间】:2021-02-11 23:30:39
【问题描述】:

我试图让用户通过 API 进行搜索,但出现以下错误:

“找不到没有 ID 的游戏”

这是我的控制器:

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

我的路线:

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

我认为我的搜索表单不太可能导致错误,但无论如何:

<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 %>

我是否需要更改我的路由,或者我编写控制器的方式有问题?

【问题讨论】:

    标签: ruby-on-rails api model-view-controller


    【解决方案1】:

    所以你得到了这个错误,因为当你到达 def search 方法时 params[:id] 不存在。对某事调用.find 总是会导致引发异常,除非找到某事。如果这是有意的,那么冷静,否则将其更改为.find_by id: params[:id]。这将导致您的 @games 变量为零。

    我认为您正在尝试搜索 params[:game]。在这种情况下,您可能必须使用@games = Game.find_by game: params[:game]

    您可以在日志中查看传递给您的方法的参数。但附加调试器可能是值得的;例如 byebug 到您方法的顶部,这样您就可以看到存在哪些参数。

    【讨论】:

      猜你喜欢
      • 2021-10-09
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 2013-01-10
      相关资源
      最近更新 更多