はじめに
アプリ開発中に、この違いが理解出来ておらず、はまってしまったのでしっくり来たものを参考にまとめてみた。
render
コントローラーのアクションを実行した結果、何らかのview
が決定され、レンダリングされる。
view
は以下の2通りで決まる。
- アクションで指定しない場合、規約に従ってリソース名やアクション名を元に表示するview
が決まる。
- render
で明示的に指定すると、指定したview
が表示される。
redirect_to
redirect_to
は、view
の表示には直接は関係なく、新たなHTTPリクエスト
が発行される。(下図の4番※GETのみ)新たなリクエストが発行された後は下図の5番以降でrender
の図の2番以降と同じ。つまり表示自体はこちらも最終はrender
。
個人的に重要だと思うpoint
-
render
だとview
にいくので、インスタンス変数を定義し直せない点。 -
redirect_to
を使った場合は再度リクエストを送るので、コントローラを経由する。つまりインスタンス変数を再度定義し直せる点。
参考
render と redirect の違い
https://qiita.com/january108/items/54143581ab1f03deefa1