在用户邮件中使用DB中的模板并解释字符串中的ruby代码?

时间:2013-09-08 03:33:40

标签: ruby-on-rails ruby html5 mongodb actionmailer

好的,这个伤害了我的大脑:

我在send_invoice_html.erb中有这样的东西,这是我的user_mailer视图之一:

<% if @cust_inv_template %>
<%=raw @cust_inv_template.cust_mail_invoice_template%>
<%else%>

所以我让用户在另一个视图中设置他们的电子邮件模板,将其保存到数据库,然后我想说“如果有模板,请使用它,否则,使用我的默认”。

在我的模板中是一些HTML和一些Rails代码:

<html>
Aloha <%= @user.first_name %>,<br />

<p>Please find attached your invoice for Job #<%= @job.job_number %> which we completed on <% ed = Date.parse(@job.end_date.to_s); 
    endDate = Date.strptime(ed.to_s, "%m-%d-%Y") %><%= endDate.to_s %>.</p>
<p>If you have any questions, please call us at <%= number_to_phone(@admin.phone_number) %> or email us at <%= @admin.email %></p>

<br />Thanks,

<br/><%= @admin.name %>
</html>

因此,当邮件发送到我的邮箱(Gmail)时,我看到:

Aloha <%= @user.first_name %>,
Please find attached your invoice for Job #<%= @job.job_number %> which we completed on <% ed = Date.parse(@job.end_date.to_s); endDate = Date.strptime(ed.to_s, "%m-%d-%Y") %><%= endDate.to_s %>.

If you have any questions, please call us at <%= number_to_phone(@admin.phone_number) %> or email us at <%= @admin.email %>

TEST TEST TEST TEST TEST


Thanks, 
<%= @admin.name %>

Ergo - 使用&lt;%=原始部分(之前我尝试过html_safe),我的HTML得到了很好的尊重 - 但Rails代码正在按原样吐出。我希望在发送消息之前解释Rails-y的好处。

当我拿出if else的东西并且只使用完全相同的模板时,Rails代码被尊重。

这意味着必须有某种“吐出这个字符串中的内容var并且如果有任何酷酷的东西在那里继续并在某些类中解释”方法:)

任何人都知道那是什么?

1 个答案:

答案 0 :(得分:1)

raw是关于不转义HTML,但它不会解释您的ruby代码。要解释您的ruby代码,您需要使用评估erb模板。

<%=raw Erb.new(@cust_inv_template.cust_mail_invoice_template).result %>

Check the docs了解更多信息。