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