首页 文章

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

提问于
浏览
0

这个问题在这里已有答案:

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

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

要使用的模板因用户而异,并从数据库中选取 . 如何渲染此字符串中的ERB模板,而不是在views目录中呈现模板文件?

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

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

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

2 回答

  • 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
    
  • 6

    当然 . 这很简单

    render inline: string_template

    对于邮件视图:

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

相关问题