2011-12-23 14 views
11

Nella Ruby on Rails 3 tutorial, il codice utilizza:Perché utilizzare la corrispondenza anziché ottenere quando si esegue il routing in Rails?

match '/signup', :to => 'users#new' 
match '/signin', :to => 'sessions#new' 
match '/signout', :to => 'sessions#destroy' 

match '/contact', :to => 'pages#contact' 
match '/about', :to => 'pages#about' 
match '/help', :to => 'pages#help' 

piuttosto che

get '/signup', :to => 'users#new' 
get '/signin', :to => 'sessions#new' 
get '/signout', :to => 'sessions#destroy' 

get '/contact', :to => 'pages#contact' 
get '/about', :to => 'pages#about' 
get '/help', :to => 'pages#help' 

anche se tutti i percorsi vogliono solo il HTTP GET verbo. Perché non utilizzare get (o :via => [:get] su match) e limitare l'azione di routing come una questione di pratica?

risposta

22

Ritengo che sia una buona pratica utilizzare get [...] anziché match. Come hai già detto correttamente, match creerà sia GET che POST. Perché crearli se non ne hai bisogno?

L'utilizzo degli elementi di corrispondenza (get o post) corretti consente di mantenere puliti i percorsi e di evitare comportamenti indesiderati dell'applicazione. Quest'ultimo punto è vero soprattutto per le rotte POST, in cui non si vuole inserire accidentalmente un link di richiesta GET sulla propria pagina Web che può essere seguito dai bot di ricerca.

Aggiornamento [2013-05-12]: Da Rails 4.0 in poi ora si è required to explicitly specifiy the request method.

+5

+1 per l'aggiornamento di rails 4.0. Grazie per aver dedicato del tempo ad aggiornare una vecchia risposta. – bengem

+0

Indovina ora 'match' è meglio se hai percorsi utilizzati per più verbi http. –

+0

@PetrosKyriakou Perché è così? So che di tanto in tanto, le migliori pratiche nell'utilizzo di un turno di struttura. Tuttavia, non penso che questo sia il caso qui. Se vuoi fornire sia 'get'and' post'routes, definirli separatamente usando le parole chiave 'get' e' post'. Come accennato nella risposta aggiornata, Rails ora ti obbliga addirittura a definire il metodo di richiesta. Non sono a conoscenza di cambiamenti recenti a tale riguardo. – emrass

Problemi correlati