2011-09-23 78 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)$/ } 

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