0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Rails]redirect_toとrenderの違いについて

Posted at

はじめに

本記事では、redirectとrenderの違いについて記述しています。
私自身何気なく、コントローラーなどに記述しておりましたが、
改めて振り返りアウトプットしたいと思います。

redirectとrenderの違い

redirect_to
↓
ルーティング
↓
コントローラー
↓
ビュー

render
↓
ビュー

随分あっさり書きましたが、このような違いです。

redirect_to

redirect_toは新しくリクエストが送られてきた時と同じ流れになります。
そのため、同様にルーティング→コントローラー→ビューの流れになります。

render

renderは、特にリクエストをされることがなく、そのまま直接ビューにいきます。

redirect_toはコントローラーへ! renderはビューへ!ということですね。

例え

class MessagesController < ApplicationController
.
.
省略
.
.
 
   def create
     @room = Room.find(params[:room_id])
     @message = @room.messages.new(message_params)
     if @message.save
       redirect_to room_messages_path(@room)        ←ここ
     else
       @messages = @room.messages.includes(:user)
       render :index        ←ここ
     end
   end
 
.
.
"省略"
.
.
end

redirect_toは、
データを送信する時(例えば、記事を投稿できた時、記事を編集できた時)
の場合などに使用されています。

今回の場合ですと、
メッセージが送れたら、ルーティング→コントローラー→ビューroom_messages_path(@room)ですね。
コントローラーへいくことでとモデルとも連携ができ、メッセージを情報として保存することもできます。(メッセージのテーブルがあれば)

renderは、
データの送信に失敗した時(例えば、なんらかの項目が空白でログインができなかった時、記事が投稿できない時)
の場合などに使用されています。

今回の場合ですと、
送信に失敗したら、ビューへindexですね。
メッセージ送信に失敗しているので、
イジワルな言い方をするともっかいやり直し〜(ビューへ)という感じですね😇

終わりに

インプットの段階では、???でしたが、
簡単なアプリケーションで試してみると理解は深まると思い、コードを記述してみました。

他に、図を用いて理解を深めてらっしゃる記事もありましたので、
こちらを参考にしながらだと、なお理解は深まると思います。

分かりやすい図がある記事

RailsGuide

明日は日曜日ですが、コツコツがんばります!!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?