renderメソッドとは何か

renderメソッドとは

呼び出すビューを指定することができるメソッド。

通常Railsではコントローラのアクションが動くと同名のビューが呼び出されるが、そうでないビューを呼び出したい場合はこのrenderメソッドを使う。 コントローラでもビューでも使用可能。

ちなみに呼び出されたビューはerb(もしくはhamlかslim)からhtmlに変換された後、ブラウザに読み込まれて画面に描画される。 このhtmlファイルをブラウザが読み込んで描画するまでの流れを(ブラウザ)レンダリングと言う。

レンダリングはLoading、Scripting、Rendering、Paintingという4つの工程に分けられるとのことだが、脱線するのでここでは省略する。

コントローラでの主な使われ方

何かユーザーが入力したデータを保存したい時などに、saveメソッド、redirect_toメソッドと併せて使われる。 例えばこんな感じ。

def new
  @task = Task.new
end

def create
 @task = Task.new(task_params)

 if @task.save
  redirect_to tasks_url, notice: "タスク「#{task.name}」を登録しました"
 else
  render :new
 end
end

上記のコードでは、saveによる検証結果がvalidationに引っかからずtrueであればredirect_toが動き、falseであればrenderが動く流れとなっている。

後者の場合だと、renderはコントローラのアクションを経由せずにビューをレンダリングするので、ユーザーが入力したデータを残したまま再びnewのビューが描画されることとなる。より細かくいうと、newアクションの@task = Task.newが実行されず、入力値を保持したcreateアクションの@taskがそのままnewのビューに渡されるので同じ状態の見た目が再びレンダリングされるという流れ。

ちなみに前者の場合だと、redirect_toによりtasks_url向けのHTTPリクエストが送信され、indexアクションを経由したのちindexビューがレンダリングされる。

ビューでの主な使われ方

ビューでrenderメソッドを使うのは部分テンプレートを呼び出す場合がほとんど。

部分テンプレートとは複数のビューの共通部分として作成するビュー。 これは「ソフトウェア開発全体において情報を重複させない」というRailsDRY原則に基づいた手法。

renderメソッドを使って部分テンプレートを呼び出す際は、部分テンプレートを呼び出していることを明示的にするためにpartialオプションを使用する。こんな感じで。

<%= render partial: 'ファイル名' %>

参考

【Rails】renderメソッドの使い方を徹底解説! | Pikawaka - ピカ1わかりやすいプログラミング用語サイト

「HTTPリクエスト」と「HTTPレスポンス」 | ITSakura

あなたはDRY原則を誤認している? - Qiita