2011-09-23 25 views
1

我已阅读官方指南,但仍有误解。 这段代码是否可以重构?routes.rb重构“匹配”

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

helpcontactabout是在控制器home的唯一动作。

回答

3

我这样做的预感,它不是在文档中提到,但它看起来像它的工作原理(我在轨3.1):

controller :home do 
    get 'help' 
    get 'contact' 
    get 'about' 
end 

这也创造了help_urlhelp_path等帮手。

虽然有一个警告,但这会将http动词限制为GET。如果你有一个POST动作(作为一个例子,对于一个接触的形式),你可以做两种:

controller :home do 
    get 'help' 
    match 'contact', :via => [:get, :post] 
    get 'about' 
end 

或者只是:

controller :home do 
    get 'help' 
    match 'contact' 
    get 'about' 
end 

这将使接触路线上的所有HTTP动词。但是我发现明确表达所接受的动词更好。

+0

有趣的东西...... – lucapette

+0

是的,它有时看起来像路由DSL读取我的脑海。这虽然没有记录,所以我不知道你能依靠多少。 –

+0

谢谢,它非常酷! – evfwcqcg

1

你应该能够速记在这里使用的轨道做:

match 'home/help' 
match 'home/contact' 
match 'home/about' 

由于该方法名称匹配这应该工作。

+1

这不会改变网址吗? –

1

你当然可以做

match '/:action', :controller => :home, :constraints => { :action => /^(help|contact|about)$/ } 

但这既不漂亮,也不是真正的短