0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

renderの使い方

Posted at

はじめに

この記事では、Railsにおけるビューの描画を担当するrenderメソッドについて、基本的な使い方から実践的な活用方法までを解説します。

「Railsのrenderってよく見るけど、どういう動きをするの?」と疑問に思っている方や、「redirect_toとの違いが曖昧…」という方の参考になれば幸いです!

renderとは?

renderの役割

Railsのrenderメソッドとは、**指定したビューを描画(レンダリング)**するためのメソッドです。
代表的なものとして、webサイトにおけるフッターとヘッダーはどのページへ遷移しても表示させたい。そんな時にrenderが便利に働いてくれます。

例えば、app/views/users/show.html.erbを表示するには、以下のように書きます。

UsersController.rb
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(パーシャル)

_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へ遷移 フォーム送信後に別ページへ遷移するとき

具体例

example.rb
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を書いてしまうとエラーになります。

example.rb
def show
  @user = User.find(params[:id])
  render "show"
  redirect_to root_path # エラー!
end

解決策:returnを使う

example.rb
def show
  @user = User.find(params[:id])
  return render "show" if @user.nil?
  redirect_to root_path
end

まとめ

• renderはRailsのビューを描画するメソッドで、パーシャルにも対応
• redirect_toとの違いを理解し、適切に使い分けることが重要

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?