【Rails】 renderとredirect_toの違い
メンターさんにrenderとredirect_toの違いを聞いた。
困ったこと
ログイン失敗後に再度、ページの更新ボタンで読み込みを行うとエラーが発生する。
コード内容はこちら↓
# sessions_controller.rb def create user = User.find_by(email: params[:session][:email].downcase) if user && user.authenticate(params[:session][:password]) session[:user_id] = user.id redirect_to user_path(user.id) else flash.now[:danger] = 'ログインに失敗しました' render :new end end
renderを使用するメリット
1から読み込み直すredirect_toと比べ、renderには早く表示ができるメリットがある。 (ただ戻すのか(render:)、一からページを読み込んで表示するのか(redirect_to:)の違いがある。 )
renderを使用するとエラーが出る原因
【renderをした場合は記憶の中にあるviewのページを表示しているだけ】
ログインに成功すればsessions_controller.rbのcreateアクション(ログイン状態を作成するためのアクション)に処理が進んでいるはずだったので、URLが「/sessions」になってしまっている。その為このURL(/sessions)のまま更新ボタンを押してしまうと、表示しているページと現在のURLの ミスマッチが生じて、No Route error またはRouting Errorが発生してしまう。