深堀り、メモ
##2つの違い
・renderを呼び出し、ブラウザに返す完全なレスポンスを作成する
・redirect_toを呼び出し、HTTPリダイレクトコードステータスをブラウザに送信する
簡潔にまとめる
renderメソッド…表示させる「viewファイル」を指定
redirectメソッド…「URL(HTTPリクエストメソッド)」を指定
##「redner」メソッド
上記の説明でもあったとおり、Action内で表示させたいViewを
指定するメソッドのこと
そのAction内で、@〜(インスタンス変数)として格納されたものは、
ViewからRubyの構文で呼び出すことが可能となる
呼び出すことができるViewの形式は、「.html」や、「.html.erb」などを始め
テキスト形式や、JSON、XML
を出力することもできる
###動き
controller → viewというシンプルな動き
表示させたいviewファイルを指定して、
ただ表示させてあげているだけ
##「redirect_to」メソッド
別のURLに対して改めてリクエストを「再送信」するよう、
ブラウザに指令を出すためのメソッド
HTTPリクエストをサーバーに送り、
ユーザーはそこから返ってくるHTMLが表示される
補足説明として、Railsのredirect_toメソッドでは
HTTPメソッドは「GET」に固定されている
なので、
POSTリクエスト等ではリダイレクトできない
###動き
controller → URL → route → controller → view
と、renderメソッドと全く異なる構造で動いていることがわかる
##使い分けるポイント、注意点
・ログインや、入力に失敗した場合など = ただエラーを表示させたいだけ
→render
メソッド
・データの更新or削除が必要な場合 = controllerの処理が必要
→redirect_to
メソッド
・1つのActionからは、1つのviewしか返せない
class ○○Controller < ApplicationController
def create
~~
if ~~
~~
render "index"
end
render "new" ☓
redirect_to "new" ○
end
end
##参考記事
https://railsguides.jp/layouts_and_rendering.html
https://qiita.com/1ulce/items/282cccba1e44158489c8
https://qiita.com/kanpe777/items/c5154b58c852855deefc
https://easyramble.com/cannot-post-redirect-on-rails.html
https://stackoverflow.com/questions/985596/redirect-to-using-post-in-rails