【Rails】renderとredirect_toはどう使い分けるの?

はじめに

動作が似ているrenderredirect_to

あまり意識せずに両者を使っていたので、それぞれの違いを調べてみました

renderとredirect_toの動き方の違い

redirect_toの方が多くの過程があり、具体的には以下のような過程の違いがあります。

・render: controller → view

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

renderとredirect_toの使い分け

renderはcontrollerで処理した結果を、指定したviewファイルに出力します。

redirect_toはviewファイルに出力する前に、1度ブラウザ上でURL(HTTPリクエスト)を指定し、再度controllerにリクエストを送信してから、viewファイルに出力します。

以上のことから、

データを追加、更新、削除を行うときは「redirect_to」、そうでなければ「render」という使いわけができそうです。

renderとredirect_toに関するエラー

1つのActionからは1つのViewしか返せません。 そのため、renderメソッドを2度呼び出したり、renderメソッドとredirect_toメソッドを両方呼び出すと、DoubleRenderErrorが発生します。

まとめ f:id:haru89:20200531090445p:plain:w70

「render」と「redirect_to」は動作が似ていますが、データの更新が必要な場合は「redirect_to」を、ログインや入力形式に失敗した場合など、ただエラーを表示させるだけの場合は「render」を使用する。というような使い分けができると思います。

参考

https://qiita.com/morikuma709/items/e9146465df2d8a094d78