2013-03-31 2 views
0

Последняя строка в моей routes.rb это:Как игнорировать определенный путь?

resources :tags, path: "", except: [:index, :new, :create], constraints: { :id => /.*/ } 

Который в основном обрабатывает все/тэги.

Проблема в том, что я пытаюсь использовать функцию livereload, rack middleware version, и что происходит, так это то, что он отправляет ping to/livereload.

Но, выше маршрут перехватывает его и отправляет его на мой TagsController .... так что мой лог-файл выглядит следующим образом:

Started GET "/livereload" for 192.168.1.1 at 2013-03-30 19:49:13 -0500 
Processing by TagsController#show as HTML 
    Parameters: {"id"=>"livereload"} 
    Tag Load (3.3ms) SELECT "tags".* FROM "tags" WHERE "tags"."name" = 'livereload' LIMIT 1 
    Tag Load (2.0ms) SELECT "tags".* FROM "tags" WHERE "tags"."id" = $1 LIMIT 1 [["id", "livereload"]] 
Completed 404 Not Found in 9ms 

ActiveRecord::RecordNotFound (Couldn't find Tag with id=livereload): 
    app/controllers/tags_controller.rb:16:in `show' 

Так как же я либо сказать, что маршрут, чтобы игнорировать все /livereload запросы или как я могу справиться с этим другим способом?

ответ

1

Вы можете использовать пользовательские ограничения на маршрут, чтобы сказать, чтобы игнорировать любой специальный маршрут, так как его простое правило, вы можете сделать это рядным, вы можете проверить req.env [ «PATH_INFO»] или вас можно также проверить req.params [ID]:

пример 1:

resources :tags, path: "", except: [:index, :new, :create], constraints: lambda{ |req| req.env['PATH_INFO'] != '/livereload' && req.params[:id] =~ /.*/ } 

пример 2:

resources :tags, path: "", except: [:index, :new, :create], constraints: lambda{ |req| req.params[:id] != '/livereload' && req.params[:id] =~ /.*/ } 
+0

Что должно быть быстрее? – marcamillion

+0

Кстати .... оба эти не работают. Я все еще получаю 'ActionController :: RoutingError (Нет совпадений маршрута [GET]"/livereload "):' – marcamillion

+0

Это другая проблема. Что касается ограничения, идея такая же, вы можете использовать ограничение, чтобы убедиться, что маршрут не будет ловить печенье, за то, что вы написали, его рабочий тон, вы можете попробовать с помощью req.params [: id]. включают в себя? ('LiveReload'). Теперь вы получаете «ActionController :: RoutingError», потому что нет маршрута, который соответствует «/ livereload», проверьте конфигурацию вашей рабочей станции, по какой-то причине маршрут промежуточным программным обеспечением не создается. – rorra

Смежные вопросы