我在我的Rails应用程序中有一个典型的邮件程序设置,其中包含两个视图(.text.erb和.html.erb),用于邮件程序类的每个方法。这些视图位于app / views /目录中,并且正在正确呈现它们。
现在,我可以渲染标记模板位于字符串变量中的视图,而不是渲染app / views / *目录中的文件吗?
要使用的模板因用户而异,并从数据库中挑选。如何呈现此字符串中的ERB模板而不是在视图目录中呈现模板文件?
一个非常相似的问题,但是从Django世界来看:Load template from a string instead of from a file
请注意:我不想将渲染视图的输出捕获为字符串。关于这一点,有几个问题。
请注意那些将其标记为重复的人:这不是关于控制器视图,而是关于邮件程序视图。每个邮件程序方法都有两个视图,两个视图都需要呈现,然后在电子邮件中作为适当的内容发送。
答案 0 :(得分:6)
不确定。这很简单
render inline: string_template
对于邮件视图:
mail do |format|
format.html { render inline: string_template}
end
答案 1 :(得分:1)
我会从数据库中获取我的sting / template,然后使用ERB内联呈现它。这允许您设置实例变量并通过本地绑定将它们传递给ERB。对我而言,这是最灵活的方法。
def my_action
template_from_database = "<h1>Hello <%= @instance_var %></h1>"
@instance_var = 'World'
render inline: ERB.new(template_from_database).result(binding)
end