我的电子邮件模板会有这样的标签。在将电子邮件发送给客户端时,他的信息将填入模板中。我找到了这个链接here,但没有答案。我抬头找到了this宝石,但我不能使用它,因为它使用液体模板,由于时间限制我无法实现它。
我知道我可以完成查找{{first_name}}
并在标签出现时替换内容的全部内容,但我怀疑它是否是实现它的有效方式。
请分享您的想法和指导。在此先感谢:)
答案 0 :(得分:4)
当我发布这个问题并且很快就忘记了它时,我在铁轨上是一个菜鸟,并且一个upvote让我想起了它。如果有人在寻找它,我成功地使它工作并分享我的解决方案:
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
用法:DynamicTemplate.parse_template(body, details)
其中
details = {first_name: user.first_name, last_name: user.last_name, company: user&.company&.name, email_address: user.email}
和
body = "Hi {{first_name}} {{last_name}}, Your company {{company}} is registered with us successfully"
使用parse_template
方法,新主体将按预期进行。
我对diofeher solution关于替换字符串的主要担心是安全性。所以用这个来管理。
希望这有助于某人。留下任何建议,使其更好。感谢
答案 1 :(得分:0)
正如您之前所说,您可以使用Liquid替换它,或者您可以尝试使用(http://www.kuwata-lab.com/erubis/)。
另一种选择是替换像这样的标签:
ERB.new(your_template.gsub("{{", "<%=").gsub("}}", "%>")).result
您可以将变量的默认打印更改为使用{{ }}
语法。