我有一个应用程序使用邮件在帐户设置时通知新用户。我最初有这个硬编码,并且运作良好。
但是,我希望能够编辑这些电子邮件而无需更改代码。因此,我创建了一个基本上是内部博客或帖子条目的表格,我可以用来编辑这些电子邮件。
我遇到的问题是,如果我在表条目中放入ruby代码,这只会在邮件程序中显示为代码,而不是转换为变量的值。
对不起,这是一个相当混乱的介绍。以下是代码的简要摘要
account_mailer.rb
class AccountMailer < ActionMailer::Base
default from: "from@example.com"
def account_signup(user, account, emailtext)
@user = user
@account = account
@emailtext = EmailText.where(:name => "Account signup").first
@h1 = @livetext.heading_1.html_safe
mail :to => user.email, from: "support@mydomain.com", :subject => "Account signup"
end
end
account_signup.html.erb
<%= @h1.html_safe %>
因此,如果在@ h1中我有以下文字
Hello <%= user.first_name %>
而不是看到:你好迈克尔 邮件程序显示Hello&lt;%= user.first_name%&gt;
有没有办法将变量h1的内容转换为最终值?
迈克尔
答案 0 :(得分:1)
您需要将存储在数据库中的字符串评估为ruby代码(或者更准确地说,作为嵌入式ruby代码)。你可以这样做
email_template = EmailText.where(:name => "Account signup").first
@h1 = ERB.new(email_template.heading_1).result(binding)
这假设EmailText具有包含模板数据
的属性heading_1
然而,这可能存在安全风险。如果用户可以在电子邮件文本表中创建条目,则他们可以在您的服务器上执行任意ruby代码。我的建议是使用不同的模板系统,如小胡子,以防止这种攻击。
答案 1 :(得分:-1)
@ user变量可在account_signup.html.erb中访问,因此您可以在account_signup.html.erb中使用is
Hello <%= @user.first_name %>
它会起作用