はじめに
本記事では、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ですね。
メッセージ送信に失敗しているので、
イジワルな言い方をするともっかいやり直し〜(ビューへ)という感じですね😇
終わりに
インプットの段階では、???でしたが、
簡単なアプリケーションで試してみると理解は深まると思い、コードを記述してみました。
他に、図を用いて理解を深めてらっしゃる記事もありましたので、
こちらを参考にしながらだと、なお理解は深まると思います。
明日は日曜日ですが、コツコツがんばります!!