Опитвам се да пренеса моите имейл шаблони на Rails към мустаци с помощта на stache gem.
Имам стандартно действие за имейл, което просто изпраща имейл до потребител. Преименувах пътя на шаблона си, за да предотвратя сблъсък при именуване, когато създавам класа за изглед на скривалище за шаблона, свързан с това действие на имейла. Този процес е описан в ръководствата за 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}}}
Това просто ми дава различна грешка „не е намерено“.