2016-12-27 75 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' 
) 

希望它有幫助。