2012-02-27 7 views
3

すべてのメソッドのインスタンス変数を設定するすべての要求の前に実行されるグローバルbeforeフィルターを定義します。Sinatra:フィルターの順序の前に

私はフィルタを設定しており、フィルタの前にいくつかのルートを設定しています。予想されるインスタンス変数がまだ設定されていないため、自分のグローバルフィルタより前に自分のルート固有のフィルタが実行されているため、クラッシュするようです。

フィルタを処理する前の順序を指定する方法はありますか?

+0

いくつかのコードを投稿できますか?どのような順序でそれらのすべてを持っていますか? –

答えて

2

これはSinatra 1.3.2で動作します。

before do 
    @filter = [] << 'everything' 
end 
before '/filter' do 
    @filter << 'specific' 
end 
get '/filter' do 
    @filter.inspect 
end 

これは、私が期待している通りの私に["everything", "specific"]を与えます。残りのすべての前にキャッチオールフィルタを使用できない可能性はありますか?

シナトラでは、ルートが一致しているのではなく、上から順にルートが評価されます。したがって、キャッチオールフィルタの前に特定のフィルタがある場合は、次のように最初のフィルタを評価します。

before '/filter' do 
    @filter = [] << 'specific' 
end 
before do 
    @filter << 'everything' 
end 
get '/filter' do 
    @filter.inspect 
end # => ["specific", "everything"] 
+0

それはそれでした。ありがとう! – jasonlfunk