「render」「redirect_to」の違い

【結論】

・「render」「redirect_to」共に
 ページを更新させる為のメソッド

・「render」は指定したviewファイルを呼び出し、
 「redirect_to」は指定したパスにアクセスする

・エラーで元の画面に戻したい場合は「render」
 データを更新してページを表示させたい場合は「redirect_to」
 という使い分けが最適

【目次】

【本題】

「render」「redirect_to」について

Railsでページを更新させる処理を行う事が可能なメソッドとして、
「render」「redirect_to」が用意されています。

一見すると同じ挙動の様に見えますが、
それぞれに適した利用シーンがあるので、
仕様の違いと共に、解説します。

「render」について

「render」は、指定したviewファイルに
アクセスする為のメソッドです。

下記の様にコントローラーで記述すると
コントローラーに属するディレクトリ配下の
veiwファイル(new)を呼び出します。

なお、インスタンス変数は更新されず、
以前に取得した物をそのまま流用します。

render :new

また、下記の様にveiwファイルに記述する事で、
指定したviewファイルを呼び出す事も可能です。

<%= render 'form' %>

「redirect_to」について

「redirect_to」は、指定したパスに
アクセスする為のメソッドです。

直接リンクをクリックした時などと同じ挙動になるので、
インスタンス変数が更新されます。

下記の様に記述する事で、
名前付きルートのパスへ移動します。

redirect_to users_path

それぞれの使い分け

上記で記述した通り、それぞれの大きな違いは
インスタンス変数が更新されるか?否か?です。

なので、エラーなどで処理が正常に完了せず、
元の画面に戻したいだけの時や、
部分テンプレートを呼び出したい場合などには、
「render」を利用します。

一方で、処理が正常に完了した後に、
違うページに遷移させたりなど、データの更新が必要な場合は、
「redirect_to」を用いるのが最適な使い分けになります。