2013-11-02 71 views
0

我希望能夠忽略我的應用程序中部分路徑。 例如: example.com/products/toys/big-toy,應忽略「玩具」部分(只是產品/大玩具)。我知道路由中可用的通配符符號,但忽略了產品路徑後的所有內容。我不知道如何做到這一點,並保持我的嵌套資源工作。忽略Rails 3中的部分路徑3

路線:

resources :products do 
    member do 
    match :details 
    end 
    resources :photos 
end 

product.rb:要解決這將是使用路由約束

def to_param 
    "#{category.slug}/#{slug}" 
end 

回答

0

的一種方式。

試試這個:

resources :products, constraints: { id: /[^\/]+\/[^\/]+/ } do 
    member do 
     match :details, via: :get 
    end 
    resources :photos 
end 

這將捕獲產品:id與中間斜線什麼,所以/products/abc/xyz/details意志路線products#detailsparams[:id]等於abc/xyz

然後,你可以在你的ProductsController濾波器之前增加一個,像這樣:

class ProductsController < ApplicationController 
    before_filter :parse_id 

    // ... 

    def parse_id 
    slugs = params[:id].split("/") 
    params[:category_id] = slugs[0] 
    params[:id] = slugs[1] 
    end 
end 
+0

嘿,感謝您的建議,但對於像編輯,索引和例如嵌套資源的所有其他路線相片。 '/ products/toys/big-toy/photos'會起作用嗎? –

+0

對不起@StefanAdamov,我誤解了你的問題。我已經更新了我的答案,以做你想做的事(我認爲)。 – micahbf