はじめに
railsチュートリアルを進めていく中で、
render
と redirect_to
がごっちゃになったので整理しようと思います。
render
ざっくりいうと、コントローラのアクションからViewを呼び出すメソッド。
対象となるアクションのコードを実行しないため、データの取得を行う時は「render」を扱う。
同じコントローラ内からViewを呼び出す
例:
def update
@book = Book.find(params[:id])
if @book.update(book_params)
redirect_to(@book)
else
render "edit"
end
end
この場合、elseになり render
が実行されると、同コントローラ内のedit.html.erb
が出力される。
また以下のようにシンボルを扱うこともできる。
render :edit
よくあるエラーとして、二重にレンダリングしてしまっている場合があるので、その場合は and return
などで二重レンダリングを回避する。
redirect_to
renderメソッド
はレスポンス構成時にどのビュー (または他のアセット) を使用するかを指定するためのもの。
それに対して redirect_toメソッド
は、別のURLに対して改めてリクエストを再送信するよう、ブラウザに指令を出すためのものとなる。
controllerのインスタンス変数は、リダイレクト先で新たに生成されるので、データを追加、更新、削除を行う時は「redirect_to」を扱う。
まとめ
redirect_toは移動するもの、renderはその場に表示させるもの
参考
https://railsguides.jp/layouts_and_rendering.html
https://qiita.com/jumpyoshim/items/ed10721c26963abdf121