Rails
RubyOnRails

【Rails】renderとredirect_toの違いと使い分け

renderとredirect_toの挙動が似ていて、混同しがちだったので
調べたものをまとめておきます。

renderとredirect_toの違い

・render     : 表示させるviewファイルを指定
・redirect_to   : URL(HTTPリクエストメソッド)を指定

renderは("フォルダ名/viewファイル名")

user_controller.rb
def
 render("user/edit")
end

redirect_toは("/URL/〜/〜/”)

user_controller.rb
def
 redirect_to("/app/posts/new")
end

※記述例だと見た目に変化が少なく、ややこしくて恐縮です。

renderとredirect_toの動き方の違い

・render     : controller → view
・redirect_to   : controller → URL → route → controller → view

redirect_toの方がちょっと遠回りしてますね。

renderがviewファイルを指定して、それを表示させるだけの処理に対して
redirect_toはブラウザ上でHTTPリクエストを受けたのと同じ処理がされます。

renderとredirect_toの使い分け

そのページに移る際に、
1.データの更新/削除、inputやformなど何かデータを送る処理
2.ログインなどの成否判断の処理
が行われているかで使い分けができます。

上のような処理が必要な場合には、

HTTPリクエストがPOSTの可能性が高い&適切なcontrollerの処理が要求される

為、redirect_toを使用します。

・render     : ログインや入力形式に失敗した場合など = ただエラーを表示させるだけ
・redirect_to   : データ更新/削除が必要な場合      = controllerの処理が必要

参考サイト

RailsGuide
https://railsguides.jp/layouts_and_rendering.html#redirect-to%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B
https://railsguides.jp/layouts_and_rendering.html#render%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B

render と redirect の違い
https://qiita.com/january108/items/54143581ab1f03deefa1

railsのrenderとredirect_toの違い
https://qiita.com/1ulce/items/282cccba1e44158489c8

【Rails】redirect_toとrenderの使い分け
https://qiita.com/jumpyoshim/items/ed10721c26963abdf121