2011-12-23 7 views
11

W Ruby on Rails 3 samouczku kod wykorzystuje:Dlaczego warto używać dopasowania, a nie uzyskiwać podczas routingu w Railsach?

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' 

zamiast

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' 

chociaż wszystkie trasy chcą tylko HTTP GET czasownika. Dlaczego nie używać get (lub :via => [:get] na match) i ograniczyć działanie routingu jako kwestię praktyczną?

Odpowiedz

22

Uważam za dobrą praktykę stosowanie get [...] zamiast match. Jak już wspomniano poprawnie, match utworzy trasy GET i POST. Po co je tworzyć, jeśli ich nie potrzebujesz?

Używanie poprawnych matchers (get lub post) utrzymuje trasy w czystości i pomaga zapobiegać niechcianym zachowaniom aplikacji. Ten ostatni punkt jest prawdziwy, szczególnie w przypadku tras POST, gdzie nie chcesz przypadkowo umieścić na stronie internetowej linku żądania GET, który może być śledzony przez roboty wyszukiwania.

Aktualizacja [2013-05-12]: Począwszy od Rails 4.0 jesteś teraz required to explicitly specifiy the request method.

+5

+1 za aktualizację szyn 4.0. Dziękujemy za poświęcenie czasu na zaktualizowanie starej odpowiedzi. – bengem

+0

Zgadnij, że 'match' jest lepszy, jeśli masz trasy używane dla wielu czasowników http. –

+0

@PetrosKyriakou Dlaczego tak jest? Wiem, że od czasu do czasu najlepsze praktyki w stosowaniu zmiany ramowej. Jednak nie sądzę, że tak jest w tym przypadku. Jeśli chcesz dostarczyć zarówno "get", jak i "post", definiuj je osobno, używając słów kluczowych "get" i "post". Jak wspomniano w zaktualizowanej odpowiedzi, Railsy zmuszają cię do zdefiniowania metody żądania. Nie jestem świadomy żadnych ostatnich zmian w tym zakresie. – emrass

Powiązane problemy