【Rails】renderとredirect_toの違いは ?使い分け方について解説!
こんにちは!
web系エンジニアを目指して学習中のsiと申します^ ^
この記事の対象者
- renderとredirect_toの違いを知りたい方
コントローラ内でリダイレクト先を指定するとき、
renderとredirect_toの2つの方法があると思います。
こういう場合はどちらを使えばいいのか!?
今回はその2つの方法の違いについて解説します!
renderとredirect_toの違いについて
renderとは
コントローラからViewを直接呼び出し画面に表示させる。
処理フロー
controller ⇨ view
redirect_toとは
HTTPリクエストをサーバーに送り、返ってきたものを表示させる。
また、redirect_toで送ることができるHTTPメソッドはGETのみ。
処理フロー
controller ⇨ URL ⇨ route ⇨ controller ⇨ view
HTTPリクエストについてはこちらの記事で解説しているので、
よかったら参考にしてください^ ^
renderとredirect_toの使用方法の違い
renderとredirect_toのどちらもが記載されているcreateアクションを例に見てみると、
def new
@output = Output.new
end
def create
@output = Output.new(output_params)
@output.user_id = current_user.id
if @output.save
redirect_to root_path
else
render 'new'
end
end
データの保存に成功した時はredirect_to、
失敗した時はrenderを使っている。
render、redirect_toどちらの場合も、
viewを表示する直前のコントローラ内アクションを元にviewを表示する。
先程の処理フローでも書いたように、renderで表示されるviewは、
renderが記載されているアクション内のインスタンス変数が使える。
redirect_toで表示されるviewは、
redirect_toで指定したパスに付随するアクション内のインスタンス変数が使える。
保存に成功した場合は、
root_pathに付随するコントローラのアクション(outputs#index)のインスタンス変数を使用してviewを表示したい。
保存に失敗した場合は、
newアクションで定義した空の@outputではなく、createアクションで定義されたデータの入っている@outputを元にviewを表示したい。
そのため、このような使い分けになります!
最後に
今回はrenderとredirect_toの使用方法の違いについて解説してみました!
Railsはこのような役に立つメソッドがたくさんあって便利ですね!
でも、逆に色々ありすぎて、今回のようにどのメソッドを使えばいいんだってなっちゃいます笑
こればっかりは学んでいくしかないですね!
今後も、どんどん記事投稿を行なっていくので、
よければ、応援の方お願い致します(*^ω^*)
それでは!
参考記事