2012-03-08 23 views
6

Sto tentando di rimuovere la rotta "catch all" o "default" da un'applicazione di binari di produzione. Sono interessato a mantenere l'operazione mentre raccolgo un registro del suo utilizzo in modo che possa sostituirlo con i percorsi hard codificati appropriati.Utilizzo registro della route predefinita nelle guide

Quindi, dato che ho la seguente linea di instradamento predefinita nel mio file config/routes.rb.

match '/:controller(/:action(/:id))' 

Come è possibile creare o recuperare un registro ogni volta che viene colpito il percorso. Questo registro includerebbe idealmente solo le richieste effettivamente gestite da questo percorso insieme ai parametri e avrebbe bisogno di lasciare il percorso stesso funzionante come normale.

risposta

7

Un modo per fare questo è il cambiamento il percorso di default per:

match ':controller(/:action(/:id))(.:format)', :using_default_route => true 

Poi ha messo la seguente funzione in app/controllers/application_controller.rb

before_filter do 
    if params[:using_default_route] 
    logger.info("Default route for #{request.path.inspect}. params = #{params.inspect}") 
    end 
end 
+0

Sei geniale bravo signore. –

+0

ottima risposta, non conoscevo questa funzionalità, grazie e +1 – apneadiving

+0

Solo un aggiornamento. Mentre questo funziona per la registrazione delle rotte in arrivo, causa la generazione della rotta per la route di default che non corrisponde (poiché il percorso using_default_ non viene passato). Ho risolto questo problema aggiungendo una seconda corrispondenza dopo la prima che consentirà la generazione e la sua esistenza verrebbe rilevata se venisse utilizzata. Tuttavia, la mia paura è la rimozione di entrambe queste linee che alla fine causerà il fallimento di quelle viste. Sarebbe bello se ci fosse un modo per registrare la generazione che utilizza anche la route di default. –

8

Un'altra possibilità sarebbe quella di utilizzare Rails router constraints opzione:

match '/:controller(/:action(/:id))', constraints: -> (req) { 
    Rails.logger.info("Default route used: #{req.path.inspect}") 
    true 
} 

Nota: la lambda re diventa vero in modo che la partita abbia successo.

Problemi correlati