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

时间:2016-01-06 05:45:50

标签: ruby-on-rails ruby erb

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

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

要使用的模板因用户而异,并从数据库中挑选。如何呈现此字符串中的ERB模板而不是在视图目录中呈现模板文件?

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

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

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

2 个答案:

答案 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