2010-09-11 97 views
3

我有一个Rails应用程序,它具有一个名为domain的控制器,它具有一个名为subdomainstats的嵌套控制器。我在routes.rb定义他们:Ruby on Rails 3:更改路由中的默认控制器和参数顺序

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之外对其他帮助者没有任何帮助 - 即edit_domain_url指向/domains/foo/edit/而不是/foo/edit

有没有办法来改变布线,以便resources生成指向根URL佣工没有“域”的一部分?

回答

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)       

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