2016-12-27 80 views
1

我构建了仅api应用程序,但由于我使用的是第三方电子邮件服务,因此我需要能够将电子邮件模板渲染为字符串以通过它到邮件服务包装的宝石。到目前为止,任何将模板呈现为字符串的尝试都会返回一个空字符串,我怀疑这是因为应用程序配置为仅API。我该如何添加对渲染模板到字符串的支持?添加支持将渲染视图渲染到仅适用于rails api的应用程序

如果不是这样,请让我知道。我使用邮戳服务。 postmark-rails宝石,它集成到标准导轨邮寄根本没有工作,普通postmark宝石(它使用邮戳API,而不是邮戳SMTP服务器)工作正常,但现在我的问题是生成适当的电子邮件的HTML。

这就是我想:

html = render_to_string(
      partial: "transfer_mailer/transfer.html.erb", 
      locals: { 
       :@body => @body, 
       :@campaign => @campaign, 
       :@chat => @chat 
       } 
     ) 

但它返回空字符串。

我的设置涉及Rails 5.0.1ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-linux]Sidekiq 4.2.7,并且在使用nginx/1.10.2Phusion Passenger 5.1.1生产IM。生产环境部署在一个天蓝色的虚拟机中,并且我添加了入站和出站规则,以允许通过端口25,465,2525和587的流量。

任何帮助将非常感激。

回答

0

看看render_to_string的文档,它看起来像路径不需要包含.html.erb,所以也许删除可以修复它。

你可以看到here的一些示例代码:

在你的情况,这将是:

render_to_string(
     partial: '/transfer_mailer/transfer', 
     locals: { 
      :@body => @body, 
      :@campaign => @campaign, 
      :@chat => @chat 
     }, 
     layout: false 
    ) 

同时确保部分文件名以下划线开始,即使你不包括它与render_to_stringrender调用。

+0

对不起,但事实并非如此,尤其是因为我有两个模板:一个在'html.erb'中完成,另一个在'text.erb'中完成。当涉及邮件模板时,这是正常的。现在,我的解决方法是在控制器中包含'ActionView :: Helpers :: AssetTagHelper',将文件加载到'File'实例中,读取并将它传递给'ERB',如[本答案](http:///stackoverflow.com/a/14351129/667599)。无论如何,感谢您的帮助:)。 – Throoze

0

还有另一种方法可以使用render_to_string来解决您的问题。请参阅下面的代码。

@body = XXX 
@campaign = YYY 
@chat = ZZZ 
html = render_to_string(
    file: 'transfer_mailer/transfer.html.erb' 
) 

希望它有帮助。