从字符串而不是文件加载 Rails 视图模板

Load the Rails view template from a string instead of a file

我的 Rails 应用程序中有一个典型的邮件程序设置,对于邮件程序 class 的每个方法都有两个视图(.text.erb 和 .html.erb)。这些视图位于 app/views/ 目录中,并且正在正确呈现它们。

现在我可以渲染一个标记模板在字符串变量中的视图,而不是渲染 app/views/* 目录中文件中的视图吗?

要使用的模板因用户而异,是从数据库中挑选的。我如何渲染这个字符串形式的 ERB 模板而不是在 views 目录中渲染模板文件?

一个非常相似的问题,但来自 Django 世界的是:Load template from a string instead of from a file

请注意:我不想将渲染视图的输出捕获为字符串。关于这个有几个问题。

请注意那些将其标记为重复的人:这不是关于控制器视图,而是关于邮件视图。每个邮件程序方法有两个视图,两个视图都需要呈现,然后作为电子邮件中的适当内容发送。

当然可以。这很简单

render inline: string_template

邮件浏览量:

mail do |format| 
    format.html { render inline: string_template}
end

我会从数据库中获取我的 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