HAML ビューを個別のファイルに分割しようとしています。私はSinatra Bookを読み、基本バージョンを実装しようとしました。
だから私はapp_helpers.rbファイルを作成しました:
# Usage: partial :foo
helpers do
def partial(page, options={})
haml page, options.merge!(:layout => false)
end
end
そして、私のapplication.rbでそれを必要とします:
require 'sinatra'
require_relative './app_helpers.rb'
次に、部分的なビュー/test.haml を作成しました。
<h3> Test message </h3>
そして、私のindex.hamlでそれを必要とします:
= partial :test
しかし、ページを更新すると、次のエラー メッセージが表示されます。
NoMethodError - undefined method `partial' for #<Application:0x514dbe0>:
c:/Dropbox/development/myprojects/test/sinatra-bootstrap/views/index.haml:27:in `evaluate_source'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/tilt-1.3.3/lib/tilt/template.rb:209:in `instance_eval'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/tilt-1.3.3/lib/tilt/template.rb:209:in `evaluate_source'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/tilt-1.3.3/lib/tilt/template.rb:144:in `cached_evaluate'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/tilt-1.3.3/lib/tilt/template.rb:127:in `evaluate'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/tilt-1.3.3/lib/tilt/haml.rb:24:in `evaluate'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/tilt-1.3.3/lib/tilt/template.rb:76:in `render'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/sinatra-1.3.1/lib/sinatra/base.rb:625:in `render'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/sinatra-1.3.1/lib/sinatra/base.rb:522:in `haml'
どうすれば修正できますか?
更新しました:
app_helpers.rbを次のように書き換えると、すべて正常に動作します。
def partial(page, options={})
haml page, options.merge!(:layout => false)
end
これの理由は何ですか?