使用Rails3进行高级路由

时间:2010-09-06 16:05:53

标签: ruby-on-rails regex routing

我想在我的路线中使用正则表达式。我有一个Products控制器,但我想要一个不同的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

2 个答案:

答案 0 :(得分:3)

我实际上没有测试过,但请试试:

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

答案 1 :(得分:0)

我不太确定这是否能回答你的问题,但你可以在routes.rb中添加一个集合:

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

如果您随后运行rake routes,则会看到您有/products/category1products/category2等网址。可以像往常一样在控制器中定义类别1,2和3:

def category1
  #custom code here
end

def category2
  #custom code here
end    

def category3
  #custom code here
end

正如我所说,我不太确定你是不是想做什么,但希望有所帮助!