在routes.rb中重构'匹配'

时间:2011-09-23 20:01:08

标签: ruby-on-rails ruby-on-rails-3

我读过官方指南,但仍然有误解。 这段代码能够重构吗?

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

helpcontactabout是控制器home中的唯一操作。

3 个答案:

答案 0 :(得分:3)

我是预感到的,并没有在文档中提到它,但看起来它有效(我在rails 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动词。但我觉得最好明确接受动词。

答案 1 :(得分:1)

你应该可以在这里使用rails速记并执行:

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

由于方法名称匹配,这应该有用。

答案 2 :(得分:1)

你当然可以做

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

但这不是更漂亮,也不是更短