Rails

【Rails基礎】renderメソッドの使い方と記述方法を初心者向けに完全解説

Rails

 

今回は、renderメソッドの使い方を初心者向けにまとめたので解説したいと思います。renderといえば部分テンプレートを思い浮かべる方も多いと思いますが、renderメソッドには様々な使い方があるので順番に見ていきましょう。

renderメソッドとは

renderメソッドは、ユーザーへ送信するべき内容を決定・出力(レスポンス)処理を行ってくれるメソッドです。

ビューとコントローラーで使用することができます。

ビューでの使い方と記述方法

まずは、ビューでのrenderメソッドについて見ていきましょう。ビューでは部分テンプレートを呼び出す際にrenderメソッドが使用されます。

例えば、index.html.erb内でheader.html.erbとfooter.html.erbを呼び出したい場合、以下のように記述することができます。

↓ index.html.erb

<%= render 'header' %>
<p>メインのコンテンツです</p>
<%= render 'footer' %>

 

↓ _header.html.erb

<p>ヘッダー部分です</p>

 

↓ _footer.html.erb

<p>フッター部分です</p>
部分テンプレート先のファイル名は、最初にアンダーバー(_)をつけることを忘れないように注意しましょう。 

 

このように、ビューでrenderメソッドを使う際は部分テンプレートの呼び出しに使われます。

部分テンプレートについてもっと詳しく知りたい方は、こちらの記事を参考にしてください。

Rails
【Rails基礎】ややこしい部分テンプレートの省略形について簡単にまとめてみた部分テンプレートの省略形について簡単にまとめています。部分テンプレートに渡すインスタンス変数が、複数形の時と単数形の場合で記述方法が異なるので、この機会に記述方法を整理してみてください。...

コントローラーでの使い方と記述方法

特定のビューファイルや形式を表示したい場合は、コントローラーでrenderメソッドを指定してあげる必要があります。今回は以下のパターンでの使い方を紹介したいと思います。

  • 特定のアクションに対するビューを表示したい時
  • 別のコントローラーのアクションを呼び出したい時
  • JSON形式でビューを返したい時
  • テキスト(文字列)を返したい時

ではそれぞれ見ていきましょう。

特定のアクションに対するビューを表示したい時

特定のアクションに対するビューを表示したい時は、以下のように記述します。この場合では、views/users/edit.html.erbが表示されることになります。

class UsersController < ApplicationController
  def index
    render action: :edit
  end
end

別のコントローラーのアクションを呼び出したい時

別のコントローラーのアクションを呼び出したい時は、以下のような記述になります。この場合では、views/items/new.html.erbが表示されます。

class UsersController < ApplicationController
  def index
    render template: "item/new"
  end
end

JSON形式でビューを返したい時

JSON形式でビューを返したい時の記述は以下のようになります。今回説明は省略しますが、jsonでレスポンスが返された次はjbuilderでjson形式に変換される必要があります。

def index
  respond_to do |format|
    format.json
  end
end

テキスト(文字列)を返したい時

テキスト(文字列)を返したい時は、以下のように記述します。indexアクションが呼び出された際、「呼び出されました」というテキストが画面に表示されます。

def index
  render text: "呼び出されました"
end

隠れrenderメソッドが存在する?

ちなみに、「render〜」とコントローラーに明示的に記述しなくても、実はrenderメソッドは隠されています。例えば、users_controller.rbに以下のような記述をしたとします。

↓ users_controller.rb

class UsersController < ApplicationController
  def index
  end
end

 

上記のように、indexアクションの中に何も記述しない場合でもindexアクションの次はviews/users/index.html.erbが自動的に呼び出されます。つまり、デフォルトではコントローラーは「app/views/コントローラー名/メソッド名.html.erb」という名前のファイルをrenderメソッドを使って呼び出しています。

↓ users_controller.rb(きちんと記述するとこうなる)

class UsersController < ApplicationController
  def index
    render action: :index
  end
end

まとめ

  • renderメソッドは、ユーザーへ送信するべき内容を決定・出力(レスポンス)処理を行ってくれるメソッドである
  • ビューでrenderメソッドを使う際は、部分テンプレートの呼び出しに使用される
  • コントローラーでrenderメソッドを使う場合は、「特定のアクションに対するビューを表示したい時」「別のコントローラーのアクションを呼び出したい時」「JSON形式でビューを返したい時」「テキスト(文字列)を返したい時」などに使用される
  • renderメソッドは明示的に記述していなくても、コントローラーで使われている

参考

Railsガイド:https://railsguides.jp/layouts_and_rendering.html

 

 

今回は、renderメソッドの使い方と記述方法を初心者向け解説しました。Railsでアプリケーションを実装する際、renderメソッドは必要不可欠と言っても過言ではないくらい重要なメソッドなので、ぜひこの機会に理解しておきましょう。