电子邮件模板中的动态内容

Aak*_*sha 5 dynamic-content email-templates ruby-on-rails-5

我有 rails 背景,我正在努力实现如图所示的东西在此处输入图片说明

我的电子邮件模板会有这样的标签。在向客户发送电子邮件时,他的信息将填写在模板中。我在这里找到了这个链接但没有答案。我抬头发现了这个gem,但是我无法使用它,因为它使用了液体模板,而且由于时间限制我无法实现它。

我知道我可以{{first_name}}在标签出现时查找和替换内容,但我怀疑这是否是实现它的有效方法。

请分享您的想法和指导。提前致谢 :)

Aak*_*sha 6

当我发布这个问题时,我是 Rails 的菜鸟,很快就忘记了它,一个赞让我想起了它。如果有人正在寻找它,我成功地使其工作并分享我的解决方案:

class DynamicTemplateModel < ActiveRecord::Base

  def self.parse_template(template, attrs={})
    result = template
    attrs.each { |field, value| result.gsub!("{{#{field}}}", value) }
    # remove anything that resembles a field but did not match a known field name
    result.gsub!(/\{\{\.w+\}\}/, '')
    return result
  end

end
Run Code Online (Sandbox Code Playgroud)

用法DynamicTemplate.parse_template(body, details)

在哪里

details = {first_name: user.first_name, last_name: user.last_name, company: user&.company&.name, email_address: user.email}
Run Code Online (Sandbox Code Playgroud)

body = "Hi {{first_name}} {{last_name}}, Your company {{company}} is registered with us successfully"
Run Code Online (Sandbox Code Playgroud)

使用该parse_template方法,新主体将如预期的那样。

我对更换字符串的diofeher解决方案的主要担忧是安全性。如此管理。

希望这可以帮助某人。留下任何建议以使其更好。谢谢


dio*_*her 0

正如您之前所说,您可以使用Liquid来代替它,或者您可以尝试使用(http://www.kuwata-lab.com/erubis/)。

另一种选择是替换标签,如下所示:

ERB.new(your_template.gsub("{{", "<%=").gsub("}}", "%>")).result
Run Code Online (Sandbox Code Playgroud)

您可以更改变量的默认打印以使用{{ }}语法。