Bunun bir parçası, bileşenle birlikte küçük bir şablon kodunun kesilmesini sağlamak için ne kadar uygun bir tepki verdiğinden geliyor. Ben bütün e-postalar için bu düzeni kullanıyorumBir mailer şablonunu .rb dosyasında nasıl oluştururum (şablon dosyası yok)
# app/mailers/membership_mailer.rb
# frozen_string_literal: true
class MembershipMailer < ApplicationMailer
def one_week_expiration(member, renewal, org)
template = slim(%(
= content_for :header
= org.name
Hello, #{member.name},
br
Your membership for #{org.name} is set to expire at
#{renewal.expires_at.to_s(:short)}.
br
Please visit <a href=#{org.url}>#{org.url}</a> to purchase
a membership renewal.
br
br
))
subject = "Your membership for #{org.name} is going to expire soon"
mail(to: member.email, subject: subject) do |format|
# there isn't a slim renderer
format.html { render text: template }
end
end
end
ve varsayılan düzeni application_mailer şeklinde ayarlanır: İşte ben bugüne kadar ne var.
# app/views/layouts/email.html.slim
= stylesheet_link_tag "email"
header
.shell
h1 = yield :header
.shell
br
= yield :body
= yield
= render partial: "/shared/email_footer"
Burada tüm render yöntemlerini istiyorum, ama ne ile mücadele ediyorum/bulmak postasının, düzen için şablon oluşturmaktır anlamaya ve bütün istediğim değişkenleri olması nerede erişilebilir şablonlara geçti.
# app/mailers/application_mailer.rb
# frozen_string_literal: true
class ApplicationMailer < ActionMailer::Base
default from: APPLICATION_CONFIG['support_email']
layout 'email'
# taken from slim/test/block rendering/helper
def slim(source, options = {}, &block)
scope = options.delete(:scope)
locals = options.delete(:locals)
Slim::Template.new('', {}) { source }.render(scope, locals, &block)
end
end
Sonunda, {...} vb erb, arbre,
Yani, özetle, ben posta (...) için arama yapmak gerekecek, Bence Şablonumda bir şablon dosyasında değil, yakutta tanımlanmış olması gibi bir şeyden dolayı, mailer ve şablonun birbirinden çok uzak olmasını istemiyorum (dosya sisteminde .. neden bu sorunun kapsamı dışındadır? sadece şimdilik ruby'de oluşturma problemini çözmek istiyorum).