1
1

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.

redirect_toとrenderの使い分け

Posted at

概要

Railsでscaffoldを使ったらcreateアクションは以下のようになる。
保存に成功した時はredirect_toでページ遷移するのに失敗したときはrenderを使っている。
この違いを解説する。

user_cocntroller.rb
def create
    @user = User.new(user_params)

    respond_to do |format|
      if @user.save
        format.html { redirect_to @user, notice: 'User was successfully created.' }
        format.json { render :show, status: :created, location: @user }
      else
        format.html { render :new }
        format.json { render json: @user.errors, status: :unprocessable_entity }
      end
    end
  end

結論

redirect_toはHTTPリクエストが走る。
renderはviewをただ表示するだけ(=URLは変化しない)

redirect_toを使用したい時

データの更新が成功したときは、HTTPリクエストを走らせて別のページに遷移する。
そうすることで、リロードで同じデータが登録されないようにする。

renderを使用したい時

保存に失敗したときは、エラーメッセージを添えてviewを表示してやるだけでOK。
無駄にリクエストを増やさないようにする。
データの登録は行われていないので、リロードされても問題ない。

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?