我希望能够忽略我的应用程序中的部分路径。 例如: example.com/products/toys/big-toy应该忽略'玩具'部分(只是产品/大玩具)来路由。我知道路由中可用的通配符,但它忽略了产品路径之后的所有内容。我不知道如何做到这一点,并保持我的嵌套资源工作。
路线:
resources :products do
member do
match :details
end
resources :photos
end
product.rb:
def to_param
"#{category.slug}/#{slug}"
end
答案 0 :(得分:0)
解决此问题的一种方法是使用路线约束。
试试这个:
resources :products, constraints: { id: /[^\/]+\/[^\/]+/ } do
member do
match :details, via: :get
end
resources :photos
end
这会将产品:id
捕获为中间带有斜杠的任何内容,因此/products/abc/xyz/details
将products#details
路由到params[: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
中添加一个前置过滤器,如下所示:
{{1}}