0

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

これの理由は何ですか?

4

2 に答える 2

1

シナトラパーシャルは、FAQに良いセクションがありました。作成する必要のあるファイルを含む要点がありました。しかし、彼らは今、宝石Sinatra-Partialを作成しました。

私の推奨は、この宝石をパーシャル(Sinatra-Partial)に使用することです。

于 2012-04-11T10:30:24.987 に答える
0

再現できません:

C:\test>cat views\layout.haml
%body= yield

C:\test>cat views\index.haml
#main=partial :test

C:\test>cat views\test.haml
%h3 Hello World

C:\test>cat test_partial.rb
require 'sinatra'
require 'haml'

helpers do
  def partial(page, options={})
    haml page, options.merge!(:layout => false)
  end
end

get '/' do
  haml :index
end

c:\test>ruby -v
ruby 1.9.2p180 (2011-02-18) [i386-mingw32]

C:\test>curl http://127.0.0.1:4567/
<body><div id='main'><h3>Hello World</h3></div></body>

ただし、@Konstantin で指摘されているように、Sinatra 1.1.0 以降、カスタムpartialsメソッドを使用する必要はなくなりました。index.hamljustに変更し#main=haml :testてメソッドを削除してもpartials、出力は同じです。

Sinatra の以前のバージョンでは、次の出力が表示されます。

<body><div id='main'><body><h3>Hello World</h3></body></div></body>
于 2012-04-09T21:54:46.620 に答える