#対象者
なんかredirect_toとかrenderとかそれぞれどんな違いあるんだっけ?使い方は?と、知ってるけど頭の中で整理できていない方
#前提知識
Railsのコントローラにおけるアクションでは、最終的にrenderされてビューを返す仕組みになっている。
つまり、1アクションにつき、1renderが必ず起こる。
def index
end
これは、render 'index'が発動していることと同じことである。
##エラー例
renderが2回処理されてしまう時
def show
~~
if ~~
~~
render 'index'
end
render 'show'
end
解決策としては、returnをしてあげる
def show
~~
if ~~
~~
render 'index'
return
end
render 'show'
end
#render
アクション内で、呼び出すビューを指定するメソッド。
つまり、デフォルトで呼び出されるビュー以外のものを呼び出すことができる。
呼び出すビューの形式は、RHTML形式(.html / html.erb等)
- 同じコントローラの別アクションビューを呼び出す時
def index
render 'edit'
render :edit
end
- 別コントローラのアクションビューを呼び出す時
def index
render "users/show"
render template: "users/show"
end
- 別ディレクトリや別アプリのアクションビューを呼び出す時
def index
render "/warehouse_app/app/views/products/show"
render file: "/warehouse_app/app/views/products/show"
end
#redirect_to
指定したURLへGETリクエストを送信するメソッド。
つまり、アクション内で発動すれば、再度RCVを呼び出すことになる。
- 指定のページに飛ばす
def index
redirect_to root_url
end
- 直前のページに戻す
def index
redirect_back(fallback_location: root_path)
end
#参考にさせていただきました
Railsガイドライン
https://railsguides.jp/layouts_and_rendering.html#render%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B
@morikuma709様
https://qiita.com/morikuma709/items/e9146465df2d8a094d78