💎
【Rails】redirect_toとrenderの使い分け
render と redirect_to
redirect_to
指定した controller、action に再度リクエストを送信
controller のインスタンス変数は、リダイレクト先で新たに生成
render
controller で処理した結果の出力先 View を指定する
controller のインスタンス変数は、そのまま View に渡される
基本的に、
データを追加、更新、削除を行う時は「redirect_to」
データの取得を行う時は「render」
def index
@message = Message.new
end
def create
@message = current_user.messages.new(message_params)
if @message.save
redirect_to :index
else
flash[:alert] = "メッセージを入力してください。"
render action: :index
end
end
メッセージボタンを押すとフォームに入力されたメッセージが送信される時の処理。
メッセージの保存に成功すれば、redirect_to により、index アクションのリクエストが再度送信されるため、メッセージは正しく表示される。
例えば、ここが render だった場合、メッセージの保存は成功するが、正しく表示されない。
参考記事
Discussion