2011-05-17 45 views
1

我有一个组模型,其中has_many文章模型。我想使用以下网址格式“{group_id}/{article_id}”。Rails中复杂的路由和URL生成

所以我写了这些航线代码:

resource :groups do 
    resource :articles 
end 
match ':group_id/:id(.:format)', :to => 'articles#show', :as => :article 
match ':id', :to => 'groups#show', :as => :group 

但导轨无法生成对于组记录和文章记录正确的URL。我如何更换自动生成的article_pathgroup_path以匹配我的路线?

回答

1

您遇到问题是因为您没有注意到多元化。当你定义一个单一的路径时,Rails不会将它视为一个集合,你可以用id来引用每个成员。你不是想为这两个群体和文章复数resources

resources :groups do 
    resources :articles 
end 

生成以下路线:

group_articles GET /groups/:group_id/articles(.:format)   {:action=>"index", :controller=>"articles"} 
        POST /groups/:group_id/articles(.:format)   {:action=>"create", :controller=>"articles"} 
new_group_article GET /groups/:group_id/articles/new(.:format)  {:action=>"new", :controller=>"articles"} 
edit_group_article GET /groups/:group_id/articles/:id/edit(.:format) {:action=>"edit", :controller=>"articles"} 
    group_article GET /groups/:group_id/articles/:id(.:format)  {:action=>"show", :controller=>"articles"} 
        PUT /groups/:group_id/articles/:id(.:format)  {:action=>"update", :controller=>"articles"} 
        DELETE /groups/:group_id/articles/:id(.:format)  {:action=>"destroy", :controller=>"articles"} 
      groups GET /groups(.:format)        {:action=>"index", :controller=>"groups"} 
        POST /groups(.:format)        {:action=>"create", :controller=>"groups"} 
     new_group GET /groups/new(.:format)       {:action=>"new", :controller=>"groups"} 
     edit_group GET /groups/:id/edit(.:format)     {:action=>"edit", :controller=>"groups"} 
      group GET /groups/:id(.:format)       {:action=>"show", :controller=>"groups"} 
        PUT /groups/:id(.:format)       {:action=>"update", :controller=>"groups"} 
        DELETE /groups/:id(.:format)       {:action=>"destroy", :controller=>"groups"} 

如果你想离开关groupsarticles段你可以通过:path => ''到每个resources的定义,但是您将不得不谨慎行事,因为对http://example.com/1/2的任何请求都将映射到群组下的文章,并且不会对最终用户和漫游器产生影响。

+0

哦,对不起,我打算使用'资源'。但':path =>'''选项有效 – ShiningRay 2011-05-18 07:20:13