ruby on railsでログアウト機能実装のエラー
見出しの通りrailsでwebアプリを実装中にログアウトボタンを押すとエラー画面が出てしまう問題に直面しました。
最初の投稿なので拙い点が多くあると思いますが今後のために残しておきます。
・実装環境
- vs code
- windows 11
- ruby on rails
- ubuntu
- devise
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は指定されたアクションを除いてすべてのアクションで実行されます。
こういった間違いもエラーを見て辿っていくことが大事だということがわかりました。