2011-12-23 16 views
11

在Ruby on Rails的3教程,代碼使用:爲什麼使用match而不是在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' 

而不是

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(或:via => [:get]match),並根據實際情況限制路由操作?

回答

22

我認爲最好使用get [...]而不是match。正如您已經提到的那樣,match將創建GET和POST路由。如果你不需要它們,爲什麼要創建它們?

使用正確的匹配器(get或post)可以保持路由清潔,並有助於防止應用程序出現不必要的行爲。後一點對於郵政路線來說尤其如此,您不希望在您的網頁上偶然添加GET請求鏈接,然後可以使用搜索漫遊器。

更新[2013-05-12]: 從Rails 4.0開始,你現在是required to explicitly specifiy the request method

+5

+1 for rails 4.0更新。感謝您花時間更新舊的答案。 – bengem 2013-05-30 17:24:43

+0

如果你有用於多個http動詞的路由,現在猜測'match'會更好。 – 2015-12-07 16:43:42

+0

@PetrosKyriakou爲什麼呢?我不時知道,使用框架轉換的最佳實踐。但是,我認爲這不是這種情況。如果你想提供'get'和'post'routes,分別使用'get'和'post'關鍵字來定義它們。正如更新後的答案中提到的,Rails現在甚至迫使您定義請求方法。我不知道這方面最近有什麼變化。 – emrass 2015-12-08 08:09:55

相關問題