web系エンジニアを目指す私、siが学習のアウトプットをメインにプログラミングについての記事を書いていきます。

【Rails】renderとredirect_toの違いは ?使い分け方について解説!

 
この記事を書いている人 - WRITER -

 

こんにちは!

web系エンジニアを目指して学習中のsiと申します^ ^

 

この記事の対象者

  • renderとredirect_toの違いを知りたい方

 

コントローラ内でリダイレクト先を指定するとき、

renderredirect_toの2つの方法があると思います。

 

こういう場合はどちらを使えばいいのか!?

今回はその2つの方法の違いについて解説します!

 

renderとredirect_toの違いについて

 

renderとは

 

コントローラからViewを直接呼び出し画面に表示させる。

処理フロー

controller ⇨ view

 

redirect_toとは

 

HTTPリクエストをサーバーに送り、返ってきたものを表示させる。

また、redirect_toで送ることができるHTTPメソッドはGETのみ。

処理フロー

controller ⇨ URL ⇨ route ⇨ controller ⇨ view

 

HTTPリクエストについてはこちらの記事で解説しているので、

よかったら参考にしてください^ ^

【Rails】HTTPリクエストと7つのアクションの関係性について解説!

 

renderとredirect_toの使用方法の違い

 

renderredirect_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はこのような役に立つメソッドがたくさんあって便利ですね!

でも、逆に色々ありすぎて、今回のようにどのメソッドを使えばいいんだってなっちゃいます笑

こればっかりは学んでいくしかないですね!

 

今後も、どんどん記事投稿を行なっていくので、

よければ、応援の方お願い致します(*^ω^*)

 

それでは!

 

参考記事

 

 

 

この記事を書いている人 - WRITER -

- Comments -

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


Copyright© .i DO WHAT I WANT , 2021 All Rights Reserved.