renderとredirect_toの違いを初心者向けに解説!テンプレート・JSON・外部URLの使い分け完全ガイド
生徒
「Railsで画面を表示したり、他のページに移動させたりするにはどうすればいいですか?」
先生
「そのときには、renderかredirect_toを使います。表示するか、移動するかで使い方が変わってきますよ。」
生徒
「renderとredirect_toの違いって、どうやって見分けるんですか?」
先生
「それでは、renderとredirect_toの違いや、JSONや外部URLの使い分けを詳しく見ていきましょう!」
1. renderとは?
renderは、指定したテンプレートや内容をその場で表示する命令です。ページを移動せずに、コントローラ内で「この画面を表示してね」と指示する役割があります。
例えば、データの保存に失敗したとき、同じ入力フォームを再表示するのに使います。
def create
@book = Book.new(book_params)
if @book.save
redirect_to @book
else
render :new
end
end
render :newで、new.html.erbテンプレートを表示します。ここではURLは変わらず、あくまで表示内容だけが変わります。
2. redirect_toとは?
redirect_toは、ブラウザに「別のURLへ移動して」と伝える命令です。つまり、別のページへジャンプする仕組みです。
データの保存が成功したあと、詳細ページへ移動するときによく使われます。
redirect_to book_path(@book)
この命令が実行されると、ブラウザが/books/1のようなURLへアクセスし直します。
3. renderとredirect_toの違いを整理しよう
- render:その場でテンプレートを表示(URLは変わらない)
- redirect_to:別のURLに移動する(ブラウザが再リクエストする)
たとえるなら、renderは「その場で画面を差し替える」、redirect_toは「ページをめくる」というイメージです。
4. renderでJSONを返す方法
RailsではHTMLだけでなく、JSON形式のデータも返すことができます。これはAPIなどでよく使われます。
render json: { title: "Rails入門", pages: 300 }
{"title":"Rails入門","pages":300}
render json:を使えば、コントローラからJSONを直接返すことができます。Webアプリだけでなく、スマホアプリと連携する際にも使えます。
5. redirect_toで外部URLにジャンプ
redirect_toは、外部のWebサイトにも移動できます。たとえば、ユーザーを公式サイトに移動させたいときなどに使えます。
redirect_to "https://example.com"
このコードを実行すると、ユーザーのブラウザはhttps://example.comへジャンプします。
6. renderとredirect_toのエラー処理での使い方
例えば、保存失敗時の対応として、次のように使い分けます。
def create
@user = User.new(user_params)
if @user.save
redirect_to @user
else
render :new
end
end
render :newとすることで、エラーメッセージとともに元の入力画面を再表示できます。一方、redirect_toを使うと、エラー情報は失われてしまうため、再入力画面ではrenderが好まれます。
7. まとめて使い分けるポイント
- 同じリクエスト内で画面を切り替えるなら→render
- 次のページに進ませたい・URLを変えたいなら→redirect_to
- JSONを返したいとき→render json:
- 外部サイトにジャンプしたいとき→redirect_to "https://..."
このように、目的によって正しく使い分けることが、Railsコントローラの基本になります。