ruby on railsの{"id"=>"sign_out"}エラー解消

ruby on railsでログアウト機能実装のエラー

見出しの通りrailsでwebアプリを実装中にログアウトボタンを押すとエラー画面が出てしまう問題に直面しました。
最初の投稿なので拙い点が多くあると思いますが今後のために残しておきます。


・実装環境

  def show
    if params[:q]&.dig(:product_name)
      squished_keywords =params[:q][:product_name].squish
      params[:q][:product_name_cont_any] = squished_keywords.split(" ")
    end
    @user = User.find(params[:id])
    @q = @user.items.ransack(params[:q])  
    @items = @q.result
  end

usercontrollerコード内の

@user = User.find(params[:id])

の部分でエラーが発生しタイトルのようなエラーがでてしまう。
これは
params[:id] はユーザーのIDを表しますが、この場合は 'sign_out' という値になっているため、ユーザーの検索に失敗しています。とのこと

解決方法

解決方法は何通りかあるので自分が試したもの、ネットで調べたものを残しておきます。
①ルーティングを設定

  devise_scope :user do 
  get '/users/sign_out' => 'devise/sessions#destroy'
  end

②devise.rbを変えるconfig/initilizers/devise.rbの272行目あたり

   config.sign_out_via = deleteの
   delete→get

筆者は①の方法と合わせて
before_action :move_to_index,only:[:index]から
before_action :move_to_index,except: :indexに変更

onlyとexceptの違いは、どちらのアクションでbefore_actionコールバックが実行されるかにあります。onlyは指定されたアクションでのみ実行され、exceptは指定されたアクションを除いてすべてのアクションで実行されます。

こういった間違いもエラーを見て辿っていくことが大事だということがわかりました。