やりたいこと
似たデザインのページを使い回したい。
以下のように、処理が完了すると「完了しました」と通知するようなページが複数存在している状況で
「完了ページ」をテンプレート化したい。
ログアウト完了→ログアウトしました!
ユーザーの削除完了→ユーザーを削除しました!
方法
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できました。
参考にした記事