我正在尝试制作一个非常基本的ERB来从多个较小的html文件制作一个html文件。我读到我可以使用
<%= h(render "filename") %>
将名为_filename.html.erb的内容文件添加到文档中。当我尝试使用
在命令行中生成文件时erb test.html.erb > new-test.html
收到错误
test.html.erb:9:in `<main>': undefined method `render' for main:Object (NoMethodError)
from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/erb.rb:849:in `eval'
from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/erb.rb:849:in `result'
from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/erb.rb:831:in `run'
from /usr/bin/erb:133:in `run'
from /usr/bin/erb:154:in `<main>'
我做错了什么,或者我是否需要将其作为网络应用程序来运行&#34;渲染&#34;上班?
test.html.erb代码供参考:
<html lang="en">
<body>
<%= h(render "me") %>
</body>
</html>
答案 0 :(得分:0)
这个脚本怎么样:
require 'erb'
def render(filename)
ERB.new(File.read "#{filename}.html.erb").result(binding)
end
File.open('new-test.html', 'w') do |file|
file.write render('test')
end
它会读取你的test.html.erb,正确插入ruby代码,包括调用我们的自定义渲染(所以不需要任何外部库来处理),并输出一个new-test.html文件。您可以通过以下方式运行它:
ruby script_name.rb
注意我们需要如何向ERB提供绑定对象。它定义了模板中插值ruby的评估上下文。这里我们提供脚本本身的绑定,这就是为什么我们可以访问erb模板中的render方法。