Skip to content

フォームにメッセージテンプレートをセットする方法

ymmtd0x0b edited this page Jul 25, 2023 · 8 revisions

概要

#6370 によりメッセージテンプレートを扱うクラスを作成しました。

YAML形式で作成したメッセージテンプレートを MessageTemplate.load から呼び出すことでハッシュに変換することができます。また、事前に ERB をテンプレート内に埋め込めば一部の情報を動的に変更する事も可能です。

利用例

例えば、「イベントを作成した際、お知らせページを自動作成しタイトルとイベント内容に作成したイベントの内容を反映させたい」という状況があったとします。


お知らせ作成ページに埋め込みたいテンプレート

タイトル

{イベント名}を開催します🎉

本文

<!-- このテキストを編集してください -->

{イベント名}を開催します🎉

- 開催日時
    - {イベント開始日時} 〜 {イベント終了日時}
- 会場
    - {会場}
- 定員
    - {定員}
- 募集期間
    - {募集開始日時} 〜 {募集終了日時}

---

{イベントの詳細}

## 参加登録はこちら
https:xxxxxxxxx(イベントページのURL)

---

実現手順

この場合以下の手順を踏むことで実現できます。

  1. イベントを作成した際に、自動作成するお知らせページのテンプレートを作成する
    config/message_templatesに手動で YAMLファイル を作成してください。
    例: config/message_templates/event_announcements.yml

  2. 任意のキーに表示したいテンプレートを記述する

title: <%= "#{event.title}を開催します🎉" %>
description: |
  <!-- このテキストを編集してください -->

  <%= "#{event.title}を開催します🎉" %>

  - 開催日時
    - <%= "#{I18n.l event.start_at}#{I18n.l event.end_at}" %>
  - 会場
    - <%= event.location %>
  - 定員
    - <%= event.capacity %>
  - 募集期間
    - <%= "#{I18n.l event.open_start_at}#{I18n.l event.open_end_at}" %>

  ---

  <%= event.description %>

  ## 参加登録はこちら
  <%= Rails.application.routes.url_helpers.event_url event %>

  ---
  1. コントローラーでメッセージテンプレートを読み込む
    ERB を埋め込んでいる場合はテンプレート読み込み時に paramsオプション が必要になります。
# app/controllers/announcements_controller.rb
event = Event.find(params[:event_id])
template = MessageTemplate.load('event_announcements.yml', params: { event: event }) # ここでメッセージテンプレートを読み込んでいる
@announcement.title       = template['title'] # 読み込んだ後はメッセージテンプレート内のキーに対応したハッシュを指定する事で各テンプレートを呼び出せます
@announcement.description = template['description']

以上でOKです。

Image from Gyazo

注意点

メッセージテンプレート内でヘルパーを利用したい場合はフルパスで記述する必要があります。

Clone this wiki locally