Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何使用.html.erb作为Sinatra视图的文件扩展名?_Ruby_Sinatra_Erb - Fatal编程技术网

Ruby 如何使用.html.erb作为Sinatra视图的文件扩展名?

Ruby 如何使用.html.erb作为Sinatra视图的文件扩展名?,ruby,sinatra,erb,Ruby,Sinatra,Erb,如果我有以下Sinatra代码: get '/hi' do erb :hello end 如果我有一个名为views/hello.erb的文件,这将非常有用。但是,如果我有一个名为views/hello.html.erbSinatra的文件,它将找不到该文件并给我一个错误。如何告诉Sinatra我希望它将.html.erb作为有效的.erb扩展名?这样就可以了 get '/hi' do erb :'hello.html' end 或者 get '/hi' do erb 'hell

如果我有以下Sinatra代码:

get '/hi' do
  erb :hello
end
如果我有一个名为
views/hello.erb
的文件,这将非常有用。但是,如果我有一个名为
views/hello.html.erb
Sinatra的文件,它将找不到该文件并给我一个错误。如何告诉Sinatra我希望它将
.html.erb
作为有效的.erb扩展名?

这样就可以了

get '/hi' do
  erb :'hello.html'
end
或者

get '/hi' do
  erb 'hello.html'.to_sym
end
Sinatra用于呈现其模板,并将扩展与模板关联。您所要做的就是告诉Tilt它应该使用ERB来渲染该扩展:

Tilt.register Tilt::ERBTemplate, 'html.erb'

get '/hi' do
  erb :hello
end
编辑以回答后续问题。这里没有
#unregister
,还需要注意的是,Sinatra更喜欢hello.erb而不是hello.html.erb。解决首选项问题的方法是覆盖
erb
方法或创建自己的渲染方法:

Tilt.register Tilt::ERBTemplate, 'html.erb'

def herb(template, options={}, locals={})
  render "html.erb", template, options, locals
end

get '/hi' do
  herb :hello
end

它会更喜欢hello.html.erb,但如果找不到hello.html.erb,它仍然会选择hello.erb。如果您真的想防止在任何情况下找到.erb文件,我想,您可以将ERBTemplate子类化,并将其注册到.html.erb中,但坦率地说,这听起来并不值得。

+1。这是Issac答案的合理替代方案,谢谢。我想在全球范围内制定这一惯例,而不是在每条路线上都这样做,所以我同意他的答案。考虑到没有ERB扩展,这不是一个好建议谢谢!很好用,而且还能让
.erb
工作。并不是说我想混合惯例,但还是很容易知道。你知道吗?如果我不想再处理.erb,而只处理.html.erb,我可以调用
.register
以外的东西来禁用.erb扩展名吗?