次の Sinatra コードがあるとします。
get '/hi' do
erb :hello
end
というファイルがある場合、これはうまく機能しますviews/hello.erb
。ただし、views/hello.html.erb
Sinatra というファイルがある場合、ファイルが見つからず、エラーが発生します。.html.erb
Sinatra に、有効な .erb 拡張子として検索するように指示するにはどうすればよいですか?
Sinatraは、Tiltを使用してテンプレートをレンダリングし、拡張機能をそれらに関連付けます。あなたがしなければならないのは、その拡張機能をレンダリングするためにERBを使用する必要があることをTiltに伝えることです。
Tilt.register Tilt::ERBTemplate, 'html.erb'
get '/hi' do
erb :hello
end
フォローアップの質問に答えるために編集します。#unregister
Sinatraがhello.html.erbよりもhello.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に対して登録することもできますが、率直に言って、それだけの価値はありません。
これはすべきです
get '/hi' do
erb :'hello.html'
end
または代わりに
get '/hi' do
erb 'hello.html'.to_sym
end