Ruby on Rails 3:更改路由中的默认控制器和参数顺序

时间:2010-09-11 11:20:33

标签: ruby-on-rails routing

我有一个Rails应用程序,它有一个名为domain的控制器,它有一个名为subdomainstats的嵌套控制器。我在routes.rb中定义了它们:

resources :domains do
    resources :subdomains, :stats
end

我更改了域和子域模型的to_param以使用域名,例如:我得到的路由是http://site/domains/foo/subdomains/bar

我想整理一下,以便我可以只使用http://site/domains/foo/subdomains/bar访问http://site/foo/subdomains/bar而不是routes.rb。我在match "/:id/" => "domains#show", :as => :domain 中尝试了以下内容:

http://site/foo

哪种方法很好,但它只能让我使用路径http://site/foo/subdomains/bar,但例如domain_url没有。我可以为每个相应的模型和嵌套模型创建匹配行,但除了/domains/foo/edit/之外,它对其他帮助程序没有任何作用 - 即edit_domain_url指向/foo/edit而不是resources

有没有办法更改路由,以便{{1}}生成指向根网址而没有“域”部分的帮助程序?

1 个答案:

答案 0 :(得分:3)

路线中的单match只会创建一条路线。资源助手一次创建许多路由。幸运的是,有很多自定义选项。如果您想从路径中省略/domains/,则只需:

resources :domains, :path => "/" do
  resources :subdomains, :stats
end

使用config/routes.rb中的上述内容,正在运行rake routes说明如下:

    domain_subdomains GET    /:domain_id/subdomains(.:format)         
    domain_subdomains POST   /:domain_id/subdomains(.:format)         
 new_domain_subdomain GET    /:domain_id/subdomains/new(.:format)     
edit_domain_subdomain GET    /:domain_id/subdomains/:id/edit(.:format)
     domain_subdomain GET    /:domain_id/subdomains/:id(.:format)     
     domain_subdomain PUT    /:domain_id/subdomains/:id(.:format)     
     domain_subdomain DELETE /:domain_id/subdomains/:id(.:format)     
         domain_stats GET    /:domain_id/stats(.:format)              
         domain_stats POST   /:domain_id/stats(.:format)              
      new_domain_stat GET    /:domain_id/stats/new(.:format)          
     edit_domain_stat GET    /:domain_id/stats/:id/edit(.:format)     
          domain_stat GET    /:domain_id/stats/:id(.:format)          
          domain_stat PUT    /:domain_id/stats/:id(.:format)          
          domain_stat DELETE /:domain_id/stats/:id(.:format)          
              domains GET    /(.:format)                              
              domains POST   /(.:format)                              
           new_domain GET    /new(.:format)                           
          edit_domain GET    /:id/edit(.:format)                      
               domain GET    /:id(.:format)                           
               domain PUT    /:id(.:format)                           
               domain DELETE /:id(.:format)                           

看起来像你需要的所有路线!