Синатра: до заказа фильтра - PullRequest
3 голосов
/ 27 февраля 2012

Я хочу определить глобальный фильтр до, который будет запускаться перед каждым запросом, который будет устанавливать некоторые переменные экземпляра для всех методов.

Я настроил фильтр и также настроил некоторый маршрут, определенный передфильтры.Похоже, что мои специфичные для маршрута фильтры выполняются до моего глобального и, следовательно, сбой, потому что ожидаемые переменные экземпляра еще не установлены.

Есть ли способ указать порядок, в котором перед обработкой фильтров?

1 Ответ

2 голосов
/ 27 февраля 2012

Это работает для меня, на Синатре 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"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...