我想在Mail erb模板中用作body。当我在Pony gem上设置它时,它可以工作。
post 'test_mailer' do
Mail.deliver do
to ['test1@me.com', 'test2@me.com']
from 'you@you.com'
subject 'testing'
body erb(:test_mailer) # this isn't working
end
end
private
fields = [1, 2] # some array
ERB档案
<% fields.each do |f| %>
<%= f %>
<% end %>
答案 0 :(得分:5)
假设您使用Pony的原始Sinatra路线看起来像这样:
post 'test_mailer' do
Pony.mail :to => ['test1@me.com', 'test2@me.com'],
:from => 'you@you.com',
:subject => 'testing',
:body => erb(:test_mailer)
end
您可以看到此处的电子邮件属性由哈希指定。当切换到使用Mail gem时,它的属性由在特定上下文中调用的块定义,以便这些特殊方法可用。
我认为问题可能与在块内调用erb
有关。以下是您可以尝试的一些事项:
尝试以可以传递到块中的方式生成ERB:
post 'test_mailer' do
email_body = erb :test_mailer, locals: {fields: fields}
Mail.deliver do
to ['test1@me.com', 'test2@me.com']
from 'you@you.com'
subject 'testing'
body email_body
end
end
或者全局调用ERB而不是使用sinatra帮助器:
post 'test_mailer' do
context = binding
Mail.deliver do
to ['test1@me.com', 'test2@me.com']
from 'you@you.com'
subject 'testing'
body ERB.new(File.read('views/test_mailer.erb')).result(context)
end
end