4

我知道如何在路徑文件中設置嵌套的資源......問題在於如何選擇使用相同的有效負載和更少的行。Rails路由,has_many和可選的嵌套資源理智?

可以說我有一個BlogSite。 BlogSite有很多Posts,但它也有很多Authors和許多Dates。 (這可能不是最好的例子,但忍受着我)。

做CRUD上Post,我希望能夠用

/blog_sites/1/author/2/date/3/posts #all posts on site 1 from author 2 on date 3 
/blog_sites/1/author/2/posts  #all posts on site 1 from author 2 
/blog_sites/1/date/3/posts   #all posts on site 1 on date 3 
/blog_sites/1/posts     #all posts on site 1 
/author/2/date/3/posts    #all posts from author 2 on date 3 
/author/2/posts      #all posts from author 2 
/date/3/posts      #all posts from date 3 
/posts        #all posts 

,使得任何過濾參數可以在URL可選。我知道你可以使用類似

get (/blog_sites/:blog_id)(/author/:author_id)(/date/:date_id)/posts => "posts#index" 

但我不想失去使用嵌套資源路由的所有CRUD優點。目前我必須複製大部分路由才能使其工作,並且正在尋找更好的方法來執行此操作:

resources :blog_sites do 
    resources :authors do 
     resources :dates do 
      resources :posts 
     end 
     resources :posts 
    end 
    resources :dates do 
     resources :posts 
    end 
    resources :posts 
end 

...等等。它很快就會變得非常難以管理。

如何維護可選的參數網址,同時保持routes.rb DRY和理智?

回答

4

嘗試一起使用範圍和資源。 Rails 3 routing with resources under an optional scope

scope 'blog_sites/:blog_id)(/author/:author_id)(/date/:date_id)' do 
    resources :posts 
end 
+0

這正是我是如何結束的解決它,雖然我使用嵌套的範圍,所以我可以指定條件,所有則params的乾淨,每行,旁邊的資源 – coneybeare 2012-03-13 12:32:19