3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Rails 「renderメソッド」と「redirectメソッド」

Posted at

深堀り、メモ

##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しか返せない

rb/app/controller/○○controller.rb
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

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?