我正在使用ActionMailer发送电子邮件,但我想使用Sinatra的Tilt渲染。我不知道如何从Sinatra外部访问Sinatra的实例范围,所以我可以这样做:
class Mailer < ActionMailer
def test(address)
mail(:to=>address,
:body => 'turns out you need something here?') do |format|
details = erb(:myview)
format.text { details }
format.html { markdown(details) }
end
end
end
希望你能看到我正在尝试做的事情,但目前我正在找到'找不到方法'的错误。有什么想法我可以在格式块中包含Sinatra的实例范围吗?
感谢。
答案 0 :(得分:1)
以下是几个选项。
排名第一(有点难看)
class Mailer < ActionMailer
def test(address, instance)
mail(:to=>address,
:body => 'turns out you need something here?') do |format|
details = instance.erb(:myview)
format.text { details }
format.html { markdown(details) }
end
end
end
然后在你的应用中
get '/send_mail' do
Mailer.new.test('bob@example.com', self)
end
第二名
在应用的帮助块中定义您的Mailer类。这应该可以访问 erb 。我使用普通的 mail gem做了一些非常类似的事情。除了我定义了一个方法而不是整个类。但是,认为它应该仍然有用。
helpers do
class Mailer < ActionMailer
def test(address)
mail(:to=>address,
:body => 'turns out you need something here?') do |format|
details = erb(:myview)
format.text { details }
format.html { markdown(details) }
end
end
end
end
第三名
查看Sinatra和/或Tilt的代码,按照 erb 向上堆栈,直到它不再关心请求实例,并复制它。