はじめに
この記事では、Railsにおけるビューの描画を担当するrenderメソッドについて、基本的な使い方から実践的な活用方法までを解説します。
「Railsのrenderってよく見るけど、どういう動きをするの?」と疑問に思っている方や、「redirect_toとの違いが曖昧…」という方の参考になれば幸いです!
renderとは?
renderの役割
Railsのrenderメソッドとは、**指定したビューを描画(レンダリング)**するためのメソッドです。
代表的なものとして、webサイトにおけるフッターとヘッダーはどのページへ遷移しても表示させたい。そんな時にrenderが便利に働いてくれます。
例えば、app/views/users/show.html.erbを表示するには、以下のように書きます。
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
render "show"
end
end
renderの具体的な使い方
1. 基本的なビューの描画
例えば、app/views/products/index.html.erb
を表示する場合は、
render "products/index"
と書くことで、指定したビューが描画されます
2. パーシャルの利用(render partial:)
パーシャル(部品化されたビュー)をレンダリングする際には、partial:オプションを使用します。
例:パーシャルを利用したリスト表示
app/views/users/_user.html.erb(パーシャル)
<p><%= user.name %></p>
</div>
app/views/users/index.html.erb
<% @users.each do |user| %>
<%= render partial: "user", locals: { user: user } %>
<% end %>
ポイント
• partial: "user"と書くことで、_user.html.erbを呼び出せる
• locals:を使うと、パーシャル内でuser変数を使用できる
3. インラインテンプレート(render inline:)
テンプレートをファイルとして用意せず、直接文字列としてレンダリングできます。
render inline: "<h1>Hello, <%= @user.name %></h1>"
これはあまり使われませんが、簡単なデバッグや一時的な表示で便利です。
4. ファイルの直接指定(render file:)
render file:
を使うと、特定のパスにあるビューを直接描画できます。
render file: "app/views/static_pages/about"
ただし、通常のrender "static_pages/about"
とほぼ同じ動作をするため、基本的にはfile:
を指定せずにシンプルに書くのがベストです。
renderとredirect_toの違い
1 | 2 | 3 |
---|---|---|
メソッド | 動作 | 使い所 |
render | 同じリクエストないでビューを描画 | エラーメッセージを表示したいとき |
redirect_to | 新しいリクエストとして別のURLへ遷移 | フォーム送信後に別ページへ遷移するとき |
具体例
def create
@user = User.new(user_params)
if @user.save
redirect_to @user, notice: "ユーザーが作成されました"
else
render "new"
end
end
• 保存成功時はredirect_toで詳細ページへリダイレクト
• 保存失敗時はrender "new"でフォームを再表示(リクエストを保持)
この使い分けを理解しておくと、面接でも「適切に選択できる」とアピールできます!
render使用時の注意点
1. 二重レンダリングエラー
以下のようにrenderの後にredirect_toを書いてしまうとエラーになります。
def show
@user = User.find(params[:id])
render "show"
redirect_to root_path # エラー!
end
解決策:returnを使う
def show
@user = User.find(params[:id])
return render "show" if @user.nil?
redirect_to root_path
end
まとめ
• renderはRailsのビューを描画するメソッドで、パーシャルにも対応
• redirect_toとの違いを理解し、適切に使い分けることが重要