首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >变量中的Mailer ruby代码

变量中的Mailer ruby代码
EN

Stack Overflow用户
提问于 2014-07-07 13:22:26
回答 2查看 48关注 0票数 0

我有一个应用程序,使用邮件通知新用户时,他们的帐户已经建立。我最初有这个硬编码,而且运行良好。

然而,我希望能够编辑这些电子邮件而不必更改代码。因此,我创建了一个表格,基本上是一个内部博客或帖子条目,我可以用来编辑这些电子邮件。

我遇到的问题是,如果我在表条目中输入ruby代码,它只是作为代码出现在mailer中,而不是转换为变量的值。

抱歉,这是个相当混乱的介绍。以下是代码的简要摘要

account_mailer.rb

代码语言:javascript
复制
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

代码语言:javascript
复制
<%= @h1.html_safe %>

因此,如果在@h1中,我有以下文本

代码语言:javascript
复制
Hello <%= user.first_name %>

邮递员没有看到: Hello,而是显示了Hello <%= user.first_name %>

是否有任何方法将变量h1的内容转换为最终值?

迈克尔

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-07 14:32:50

您需要将存储在db中的字符串计算为ruby代码(或者更准确地说,将其计算为已包含的ruby代码)。你可以这样做

代码语言:javascript
复制
 email_template = EmailText.where(:name => "Account signup").first
 @h1 = ERB.new(email_template.heading_1).result(binding)

这假设EmailText有一个包含模板数据的属性heading_1

然而,这可能是一种安全风险。如果用户可以在电子邮件文本表中创建条目,他们可以在您的服务器上执行任意的ruby代码。我的建议是使用一个不同的模板系统,如胡子,以防止这样的攻击。

票数 1
EN

Stack Overflow用户

发布于 2014-07-07 13:29:14

@user变量在account_signup.html.erb中是可访问的,因此可以在account_signup.html.erb中使用

代码语言:javascript
复制
Hello <%= @user.first_name %>

看起来不错

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24611625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档