LoginSignup
2
1

More than 1 year has passed since last update.

【Rails】異なる階層のファイルをrender (部分テンプレート)

Last updated at Posted at 2022-03-22

やりたいこと

似たデザインのページを使い回したい。
以下のように、処理が完了すると「完了しました」と通知するようなページが複数存在している状況で
「完了ページ」をテンプレート化したい。

ログアウト完了→ログアウトしました!
ユーザーの削除完了→ユーザーを削除しました!

方法

render template: 'ファイル名', locals: { ローカル変数の定義 }

今回はviews/shared/after_xxx.html.erbを呼び出します。
以下のようにタイトルやメッセージ、path を柔軟に変更できるファイルをイメージします。

_after_xxx.html.erb
<div>
  <div class="">
       <h1><%= title %></h1>   #ここ
    </div> 
  <div class="">
    <p><%= message %></p>   #ここ
  </div>
  <div class="">
    <%= link_to path_message, path_detail %>  #ここ
  </div>
</div>

以下コントローラ、今回のテンプレートはviews/shared/にあります。
views/sessions/とは異なる階層にテンプレートがあるのでディレクトリの指定をする必要があります。
ログアウト完了後に部分テンプレートを呼び出す処理を想定しています。

controllers/sessions_controller.rb

class SessionsController < ApplicationController
//

  def destroy
    reset_session
    title = "ログアウトしました"
    message = "お疲れ様でした"
    path_message = "ログイン画面に戻る"
    path_detail = login_path
    render partial: 'shared/after_xxx',
           locals: { title: title, message: message, path_message: path_message, path_detail: path_detail }
  end

//
end

ログアウト完了後、以下のようにrenderできました。

image.png

参考にした記事

2
1
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
2
1