从字符串而不是文件加载 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
我的 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