2010-09-06 3 views
2

Я хочу использовать регулярные выражения внутри своих маршрутов. У меня есть контроллер продуктов, но я хочу другую структуру URL для доступа к продукцииРасширенная маршрутизация с Rails3

Эти URL должны вызвать действие в мой контроллер (Products:show_category(:category))

Возможно ли это как можно?

match "(this|that|andthat)" => "products#show_category", :category => $1 

действие должно выглядеть следующим образом

def show_category 
    puts params[:category] # <-- "this" if http://host/this/ is called 
    # ... 
end 

ответ

3

Я на самом деле не проверял, но попробовать:

match ':category' => 'products#show_category', :constraints => { :category => /this|that|andthat/ } 
+0

Отлично, это работает отлично! Спасибо за подсказку: ограничения-вариант – Fu86

0

Я не слишком уверен, если это отвечает на ваш вопрос, но вы можете добавить коллекцию в routes.rb:

resources :products do 
    collection do 
    get :category1 
    get :category2 
    get :category3 
    end 
end 

Если вы затем запустите rake routes, вы увидите, что у вас есть URL-адреса, такие как /products/category1 и products/category2. Категория1, 2 и 3 могут быть определены в контроллере, как обычно:

def category1 
    #custom code here 
end 

def category2 
    #custom code here 
end  

def category3 
    #custom code here 
end 

Как я уже сказал, я не слишком уверен, что это то, что вы хотите сделать, но надеюсь, что помогает немного!

+0

Я думал, что есть более разумный способ сделать это. Я хочу указать все три URL-адреса, указывающие на одно и то же действие с именем категории в качестве параметра. Я немного согласовал этот вопрос. – Fu86

+0

Несомненно, предложение выше отлично! – Budgie

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