はじめに
今回はRailsでよく使われるrenderとredirect_toの違いについて。
render
renderはコントローラー内でviewファイルを決定しレンダリングされる。
render :edit
この場合だとviewファイルのeditに対応するhtmlファイルが呼び出される。
別のコントローラーからの呼び出し
別のコントローラーからの呼び出しも可能でその場合、app/viewsを起点とするフルパスを渡すことができるので、出力したいテンプレートをフルパスで指定する。
render "users/show"
app/views/users
からviewテンプレートを呼び出すことができる。
任意のファイルの指定
現在のディレクトリの外部にあっても指定することが可能。
render "/xxx/apps/user_directory/current/app/views/users/show"
様々な記述方法
render :edit
render action: :edit
render "edit"
render "edit.html.erb"
render action: "edit"
render action: "edit.html.erb"
render "books/edit"
render "books/edit.html.erb"
render template: "books/edit"
render template: "books/edit.html.erb"
render "/path/to/rails/app/views/books/edit"
render "/path/to/rails/app/views/books/edit.html.erb"
render file: "/path/to/rails/app/views/books/edit"
render file: "/path/to/rails/app/views/books/edit.html.erb"
redirect_to
別のURLに対して改めてリクエストを再送信するよう、ブラウザに指令を出すためのもの。
引数にリダイレクトさせたいurlを渡す。
redirect_to users_url
redirect_to "http://www.~"
コントローラーを指定
redirect_to controller: :users, action: :edit
前ページにリダイレクト
現在のページから前ページにリダイレクトさせる。
redirect_to :back
リダイレクトのステータスコードの変更
redirect_toはデフォでHTTPステータスコード302がブラウザに返され、リダイレクトを行う。
変更を行いたい場合
redirect_to users_path, status: 301
リダイレクした際にメッセージ追加
redirect_to users_path, notice: '追加しました
renderとredirect_toの違いについて
renderがviewファイルを指定し、表示させるだけの処理に対して
redirect_toは別のURLに対してリクエストを再送信しブラウザを動作させる。
viewファイルの表示かhttpリクエストを投げるかの違い。
renderは前画面に戻ってデータを取得して表示をさせる使い方ができる。
redirect_toはデータの更新や削除などが挙げられる。