概要
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。
無駄にリクエストを増やさないようにする。
データの登録は行われていないので、リロードされても問題ない。