2011-12-23 2 views
11

는 코드가 사용Rails에서 라우팅 할 때 get을 사용하는 대신 match를 사용하는 이유는 무엇입니까? 루비 온 레일즈 3 튜토리얼에서는

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' 

오히려

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' 

보다 모든 노선 만 HTTP는 동사를 GET 할지라도. get (또는 : match)을 사용하고 실제로 라우팅 작업을 제한하지 않으시겠습니까?

답변

22

match 대신 get [...]을 사용하는 것이 가장 좋습니다. 이미 정확하게 언급했듯이 match은 GET 및 POST 경로를 모두 만듭니다. 당신이 그들을 필요로하지 않는 이유는 무엇입니까?

올바른 matchers (가져 오기 또는 게시)를 사용하면 경로를 깨끗하게 유지하고 응용 프로그램의 원하지 않는 동작을 방지 할 수 있습니다. 후자의 점은 검색 경로가 뒤따를 수있는 웹 페이지에 실수로 GET 요청 링크를 넣고 싶지 않은 POST 경로에서 특히 그렇습니다.

업데이트 [2013-05-12] : Rails 4.0부터는 required to explicitly specifiy the request method입니다.

+5

레일 4.0 업데이트의 경우 +1. 이전 답변을 업데이트 해 주셔서 감사합니다. – bengem

+0

다중 http 동사에 사용되는 경로가 있으면 'match'가 더 나은 것 같네요. –

+0

@PetrosKyriakou 왜 그런가요? 나는 때때로 프레임 워크 교대를 사용하는 모범 사례를 알고 있습니다. 그러나, 나는 이것이 여기에 해당한다고 생각하지 않는다. 'get'와'post' 경로를 모두 제공하려면'get'와'post' 키워드를 사용하여 따로 따로 정의하십시오. 업데이트 된 답변에서 언급했듯이 Rails는 요청 메소드를 정의하도록 강요합니다. 나는 최근의 변화에 ​​대해 알지 못한다. – emrass

관련 문제