2013-11-02 3 views
0

Я хотел был бы иметь возможность игнорировать часть путей в моем приложении. Например: example.com/products/toys/big-toy следует направлять, игнорируя часть «игрушек» (только продукты/большие игрушки). Я знаю символ подстановки, доступный в маршрутах, но он игнорирует все после пути к продуктам. Я не уверен, как это сделать и поддерживаю работу моих вложенных ресурсов.Игнорировать часть пути в Rails 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#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 
+0

Эй, спасибо за предложение, но как насчет всех остальных маршрутов, таких как редактировать, индекс и вложенный ресурс, например фото. Будут ли '/ products/toys/big-toy/photos' работать? –

+0

Извините @StefanAdamov, я неправильно понял ваш вопрос. Я обновил свой ответ, чтобы сделать то, что вы хотите (я думаю). – micahbf

Смежные вопросы