💎

【Rails】redirect_toとrenderの使い分け

2017/01/30に公開約800字

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 だった場合、メッセージの保存は成功するが、正しく表示されない。

参考記事

http://ruby-rails.hatenadiary.com/entry/20140808/1407427457
http://avosalmon.hatenablog.com/entry/2014/05/17/【Rails】renderとredirect_toの違い

GitHubで編集を提案

Discussion

ログインするとコメントできます