10

次の Sinatra コードがあるとします。

get '/hi' do
  erb :hello
end

というファイルがある場合、これはうまく機能しますviews/hello.erb。ただし、views/hello.html.erbSinatra というファイルがある場合、ファイルが見つからず、エラーが発生します。.html.erbSinatra に、有効な .erb 拡張子として検索するように指示するにはどうすればよいですか?

4

2 に答える 2

26

Sinatraは、Tiltを使用してテンプレートをレンダリングし、拡張機能をそれらに関連付けます。あなたがしなければならないのは、その拡張機能をレンダリングするためにERBを使用する必要があることをTiltに伝えることです。

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

get '/hi' do
  erb :hello
end

フォローアップの質問に答えるために編集します。#unregisterSinatraが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に対して登録することもできますが、率直に言って、それだけの価値はありません。

于 2012-07-31T16:12:15.613 に答える
9

これはすべきです

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

または代わりに

get '/hi' do
  erb 'hello.html'.to_sym
end
于 2012-07-31T16:02:52.023 に答える