我有一个应用程序,使用邮件通知新用户时,他们的帐户已经建立。我最初有这个硬编码,而且运行良好。
然而,我希望能够编辑这些电子邮件而不必更改代码。因此,我创建了一个表格,基本上是一个内部博客或帖子条目,我可以用来编辑这些电子邮件。
我遇到的问题是,如果我在表条目中输入ruby代码,它只是作为代码出现在mailer中,而不是转换为变量的值。
抱歉,这是个相当混乱的介绍。以下是代码的简要摘要
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
endaccount_signup.html.erb
<%= @h1.html_safe %>因此,如果在@h1中,我有以下文本
Hello <%= user.first_name %>邮递员没有看到: Hello,而是显示了Hello <%= user.first_name %>
是否有任何方法将变量h1的内容转换为最终值?
迈克尔
发布于 2014-07-07 14:32:50
您需要将存储在db中的字符串计算为ruby代码(或者更准确地说,将其计算为已包含的ruby代码)。你可以这样做
email_template = EmailText.where(:name => "Account signup").first
@h1 = ERB.new(email_template.heading_1).result(binding)这假设EmailText有一个包含模板数据的属性heading_1。
然而,这可能是一种安全风险。如果用户可以在电子邮件文本表中创建条目,他们可以在您的服务器上执行任意的ruby代码。我的建议是使用一个不同的模板系统,如胡子,以防止这样的攻击。
发布于 2014-07-07 13:29:14
@user变量在account_signup.html.erb中是可访问的,因此可以在account_signup.html.erb中使用
Hello <%= @user.first_name %>看起来不错
https://stackoverflow.com/questions/24611625
复制相似问题