2011-06-26 15 views
0

我被困在涉及Rails 3路由的一個非常棘手的問題上,而且還不夠好,路由也無法自己找出這個問題。我有一個只有「顯示」和「索引」操作的「評論」資源。我使用Friendly ID gem作爲slugged ID,並且我也有一個嵌套評論資源,它允許人們評論評論。Ruby on Rails - 帶有索引/顯示頁面和分頁的自定義路由查看資源​​

resources :reviews, :only => [:index, :show] do 
    resources :comments, :only => [:new, :create] 
end 

所以迄今該指數頁我的路徑是簡單的「評論」和類似的演出行動「的評論/的矩陣」。目前爲止很簡單。

現在首先,我在主索引頁面遇到了一些麻煩。我在索引頁上有will_paginate gem,並且正在緩存頁面。問題是,當路徑類似/ reviews?page = 2時,緩存將不起作用,相反,當通過分頁時,我需要將路徑設置爲/ reviews/2 /,因此我在以上上述評論資源的以下內容中添加了做這個工作。

match 'reviews(/:page)' => 'reviews#index', :constraints => { :page => /[0-9]/ } 

爲什麼約束?因爲我的'顯示'資源路由不起作用,因爲上面的行 - 沒有數字約束 - 最終成爲干擾「顯示」路由的「全部抓取」。由於show動作的ID始終是單詞,而索引上的分頁頁面總是有一個數字,這就是爲什麼我這樣做。

但是,我不希望'Show'路線只是'reviews/the-matrix'。看,所有的評論都按照被評論的事物的類型分類,所以我真的希望'顯示'路徑是'評論/電影/矩陣',或者'評論/書籍/上帝之環「。

我寧願使用原始評論「顯示」路徑來顯示其他類別索引頁面,如「評論/書籍」。 (上述約束的另一個原因。)但是我要爲另一個SO問題保存這個問題,因爲我不想讓這個問題太複雜。

回到上一個問題。通常情況下,我想上述可以通過一個簡單的「匹配」路線來解決(路線通配?),除了我們在評論資源中有嵌套評論。如何在保留Comments上的評論嵌套資源的同時,製作如上所述的「顯示」頁面?

回答

0

沒有汗水(如果這是你的意思)。

match 'reviews(/:page)' => 'reviews#index', :constraints => {:page => /[0-9]+/} 
match 'reviews/comments/:id' => 'comments#my_action', :constraints => {:id => /[0-9]+/} 
match 'reviews/:path' => 'reviews#show', :constraints => {:path => /.+/} 
  • 添加約束到第三指令將允許你在你的:path使用/。 (這是真的:根本不使用約束將不允許foo/bar匹配這種模式。)(替代正則表達式/.+/,你可能希望/[a-zA-Z/]+/,但它應該不重要,因爲早期的路徑已經捕獲了所有不應該的事情#show)。
  • 訂單事宜。按照它們出現的順序保持這三個。