2011-12-23 53 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

相关问题