「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」を用いるのが最適な使い分けになります。