Я пытаюсь перенести свои шаблоны электронной почты Rails на усы, используя жемчужину усов.
У меня есть стандартное действие почтовой программы, которое просто отправляет электронное письмо пользователю. Я переименовал свой путь к шаблону, чтобы предотвратить конфликт имен при создании класса представления тайника для шаблона, связанного с этим действием почтовой программы. Этот процесс описан в руководствах по Rails.
# app/mailers/registration_mailer.rb
class RegistrationMailer < ActionMailer::Base
def bailed(user)
@user = user
mail to: user.email, template_path: 'er_registration_mailer'
end
end
Это представление Stache, связанное с описанным выше действием. Обратите внимание, что имя модуля соответствует указанному выше пути к шаблону.
# app/views/er_registration_mailer/bailed.rb
module ErRegistrationMailer
class Bailed < ::Stache::Mustache::View
def continue_registration_link
link_to "Continue registration by connecting your Twitter account",
connect_registrations_url
end
def signature
@view.render "shared/mailer/sig"
end
end
end
Наконец-то у меня есть шаблон усов для моей почтовой программы.
# app/templates/er_registration_mailer/bailed.html.mustache
<p>Hi there!</p>
<p>I noticed you recently started the signup process for my app but didn't complete it.</p>
<p>{{{continue_registration_link}}}</p>
{{{signature}}}
Когда я пытаюсь отправить электронное письмо, я получаю сообщение об ошибке при попытке отобразить партиал signature
. Этот партиал живет в app/templates/shared/mailer
, где у меня есть версии с усами и erb, которые называются _sig.html.mustache
и _sig.html.erb
соответственно.
Вот ошибка:
Failure/Error: RegistrationMailer.bailed(user).deliver
ActionView::Template::Error:
Missing partial shared/mailer/sig with {:locale=>[:en], :formats=>[:html, :text, :js, :css, :ics, :csv, :png, :jpeg, :gif, :bmp, :tiff, :mpeg, :xml, :rss, :atom, :yaml, :multipart_form, :url_encoded_form, :json, :pdf, :zip], :handlers=>[:erb, :builder, :raw, :ruby, :jbuilder, :coffee, :slim, :arb, :rb, :mustache]}. Searched in:
* "/Users/davidtuite/dev/shareshaper/app/app/views"
* "/Users/davidtuite/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/bundler/gems/active_admin-6f04ed5cec24/app/views"
* "/Users/davidtuite/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/devise-3.2.2/app/views"
* "/Users/davidtuite/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/foundation-rails-5.0.3.1/app/views"
* "/Users/davidtuite/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/kaminari-0.15.1/app/views"
# ./app/views/er_registration_mailer/bailed.rb:17:in `signature'
Rails, кажется, ищет в app/views
шаблон (или класс представления, я не уверен, какой именно).
Как я могу получить частичный рендеринг правильно?
Я использую Rails 4.0.3, Ruby 2.1.1 и stache 1.0.3.
Что я пробовал
Использование функциональности класса-оболочки stache gem вместо указания template_path
для почтовых программ и добавления префикса между именами класса представления.
Я пробовал оба:
# app/views/registration_mailer/bailed.rb
module Wrapper
module RegistrationMailer
class Bailed < ::Stache::Mustache::View
end
end
end
и (обратите внимание на структуру каталогов):
# app/views/wrapper/registration_mailer/bailed.rb
module Wrapper
module RegistrationMailer
class Bailed < ::Stache::Mustache::View
end
end
end
Но я просто получаю ошибку Uninitialized const: Wrapper
.
Я также пытался использовать усы, чтобы указать партиал в шаблоне почтовой программы:
# app/templates/er_registration_mailer/bailed.html.mustache
<!-- HTML as in above code sample -->
{{{>shared/mailer/sig}}}
Это просто дает мне другую ошибку «не найдено».