动态内容
问题描述:
答
如前所述,您可以使用Liquid来替换它,或者您可以尝试使用(http://www.kuwata-lab.com/erubis/)。
另一种方法是更换标签这样的:
ERB.new(your_template.gsub("{{", "<%=").gsub("}}", "%>")).result
你会改变变量的默认打印使用{{ }}
语法。
答
当我发布了这个答案并很快就忘了它,并且upvote提醒了我这个问题,我是一个菜单noob。我成功地使其工作和分享我的解决办法,如果有人在寻找它:
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
d,新机构将如预期。
我对diofeher solution关于更换字符串的主要担心是安全性。所以用这个来管理。
希望这可以帮助别人。留下任何建议使其更好。谢谢
恐怕我不能这样做。这是一种非常不安全的方式,并且倾向于SQL注入。我必须用值和'某个'用户'名字'的值代替'first_name'的图像是'User.delete_all'。如果在这里被替换,我的字符串将会像''。我不认为我需要在这里说别的。我的数据库将崩溃,所有数据都消失了。 – Aakanksha
噢,这会被用户使用吗?我认为它只会被你的团队使用。 – diofeher
这对于最终用户准备一个模板来说是必需的,在该模板中标签将被电子邮件应该发送给的用户的数据替换。我分享了我的解决方案。欢迎提出建议。谢谢 – Aakanksha