概要
Railsは、テンプレートをアクションで紐付けてくれるので便利ですよね。
Action ViewとERB (Embedded Ruby)ってやつです。
たまに、そのテンプレートを、他の箇所で使いたいことがあります。
調べましたがあまり情報が出てこなかったり、見つけたと思ったら動かなかったりしたので解決した方法を備忘として投稿します。
動作環境
ruby 2.6.5
rails 5.2.3
サンプル
例えばJobとかで利用。
app/views下(任意の場所可)にtemplateを作成。
sample.html.erb
<%= user_name %>さんへ
これはサンプルです。
次にJob。
send_template_job.rb
class SendTemplateJob < ApplicationJob
queue_as :default
def perform(*args)
# テンプレートを使う
content = ActionView::Base.new('app/views').render(file: 'sample',
locals: { user_name: current_user.name },
layout: false)
# テンプレートを利用して生成した文字列をどこかに送る処理を記載
# 例えばslackとか
end
end
こんな感じで書くと、erb内のuser_nameて定義してある変数が文字列として展開され取得できます。