18

Rails 3.2中,我使用这些路由声明:

get 'contact' => 'contact#new', :as => 'contact'
post 'contact' => 'contact#create', :as => 'contact'

它们导致 ( rake routes):

contact_en GET    /en/contact(.:format)    contact#new {:locale=>"en"}
contact_de GET    /de/kontakt(.:format)    contact#new {:locale=>"de"}
contact_en POST   /en/contact(.:format)    contact#create {:locale=>"en"}
contact_de POST   /de/kontakt(.:format)    contact#create {:locale=>"de"}

现在Rails 4.0抱怨这个配置:

无效的路由名称,已在使用:'contact' 您可能使用该:as选项定义了两个具有相同名称的路由,或者您可能覆盖了已由具有相同命名的资源定义的路由。

显然,路由共享相同的名称,但由于请求类型不同,我希望它们像以前一样被接受。

我如何告诉 Rails 4 像以前在 3.2 中一样生成路由?

4

3 回答 3

17

在您的情况下,只需不指定:as选项就足够了,因为 Rails 会自动从路径中获取路由名称:

get 'contact' => 'contact#new'
post 'contact' => 'contact#create'

但是,如果您有更复杂的路径模式或想要使用不同名称引用路由,那么您应该专门将第二条路由设置为:as => nil(或as: nil使用新的哈希语法)。

因此,如果您想按照需要命名路线person_path

get 'contact' => 'contact#new', :as => 'person'
post 'contact' => 'contact#create', :as => nil
于 2014-06-03T13:14:53.517 回答
12

如果这两个路由具有相同的 URL,则无需命名第二个。所以以下应该工作:

get 'contact' => 'contact#new', :as => 'contact'
post 'contact' => 'contact#create'
于 2013-10-04T19:39:11.467 回答
3

你为什么使用:as? 在这种情况下似乎不需要。

get 'contact' => 'contact#new'
post 'contact' => 'contact#create'

Prefix Verb URI Pattern        Controller#Action
contact GET  /contact(.:format) contact#new
        POST /contact(.:format) contact#create
于 2013-10-04T20:32:51.160 回答