Изобразяване на шаблони за поща с Mustache в Rails

Опитвам се да пренеса моите имейл шаблони на 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}}}

Това просто ми дава различна грешка „не е намерено“.


person David Tuite    schedule 05.03.2014    source източник


Отговори (1)


Ето пример за използване на Stache с поща:

# config / initializers / stache.rb
Stache.configure do |c|
  c.template_base_path = Rails.root.join('app', 'views')
  c.wrapper_module_name = "Wrapper"

  c.use :mustache
end

# app / mailers / registration_mailer.rb
class RegistrationMailer < ActionMailer::Base
  default template_path: 'mailers/registration_mailer'

  def bailed(user)
   @user = user
   mail to: user.email
 end
end

# app / models / wrapper / mailers / regisration_mailer / bailed.rb
module Wrapper
  module Mailers
    module RegistrationMailer
      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
  end
end

Мисля, че това, което ви липсва, е необходимостта да конфигурирате както модула за обвивка, така и пътя на шаблона.

person Kate    schedule 10.03.2014