我希望能够忽略应用程序中的部分路径。例如:example.com/products/toys/big-toy,应通过忽略“玩具”部分(仅是product / big-toy)进行布线。我知道路由中可以使用通配符,但是它会忽略产品路径之后的所有内容。我不确定如何执行此操作并使嵌套资源正常工作。
路线:
resources :products do
member do
match :details
end
resources :photos
end
product.rb:
def to_param
"#{category.slug}/#{slug}"
end
解决此问题的一种方法是使用路线约束。
试试这个:
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
。
然后,您可以在中添加一个before过滤器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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句