すべてのメソッドのインスタンス変数を設定するすべての要求の前に実行されるグローバルbeforeフィルターを定義します。Sinatra:フィルターの順序の前に
私はフィルタを設定しており、フィルタの前にいくつかのルートを設定しています。予想されるインスタンス変数がまだ設定されていないため、自分のグローバルフィルタより前に自分のルート固有のフィルタが実行されているため、クラッシュするようです。
フィルタを処理する前の順序を指定する方法はありますか?
すべてのメソッドのインスタンス変数を設定するすべての要求の前に実行されるグローバルbeforeフィルターを定義します。Sinatra:フィルターの順序の前に
私はフィルタを設定しており、フィルタの前にいくつかのルートを設定しています。予想されるインスタンス変数がまだ設定されていないため、自分のグローバルフィルタより前に自分のルート固有のフィルタが実行されているため、クラッシュするようです。
フィルタを処理する前の順序を指定する方法はありますか?
これは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"]
それはそれでした。ありがとう! – jasonlfunk
いくつかのコードを投稿できますか?どのような順序でそれらのすべてを持っていますか? –