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メソッドを使うのは部分テンプレートを呼び出す場合がほとんど。
部分テンプレートとは複数のビューの共通部分として作成するビュー。 これは「ソフトウェア開発全体において情報を重複させない」というRailsのDRY原則に基づいた手法。
renderメソッドを使って部分テンプレートを呼び出す際は、部分テンプレートを呼び出していることを明示的にするためにpartialオプションを使用する。こんな感じで。
<%= render partial: 'ファイル名' %>
参考
【Rails】renderメソッドの使い方を徹底解説! | Pikawaka - ピカ1わかりやすいプログラミング用語サイト