忽略Rails 3中的部分路径

时间:2013-11-02 15:38:31

标签: ruby-on-rails path routing wildcard

我希望能够忽略我的应用程序中的部分路径。 例如: 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

1 个答案:

答案 0 :(得分:0)

解决此问题的一种方法是使用路线约束。

试试这个:

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

这会将产品:id捕获为中间带有斜杠的任何内容,因此/products/abc/xyz/detailsproducts#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}}