自定义路由以及资源路由

时间:2011-02-28 00:20:06

标签: ruby-on-rails ruby-on-rails-3 routing custom-routes

我已经设置了自定义路线,它似乎有效。但是,我也有一个资源路由也适用于同一个控制器。我想我只是做错了什么,但我不知道它是什么。我老老实实地乱砍路线,因为我仍然对如何设置它们以及何时使用什么方法感到困惑。

以下是我正在处理的路线。

resources :shows
match "shows/:country" => "shows#index"

像这样的路线是资源:显示效果很好,但不匹配。如果我翻转它们匹配路线工作正常,但资源:显示没有。

我应该将其作为命名空间路由吗?我不确定我应该做什么。我想要完成的是这样的事情。

http://site.com/shows/canada

这将返回所有Candian节目。

感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

您可能想要做的是使用constraints,或者甚至是custom constraints class。这是一个粗略的开始,我没有测试过,也不确定它是否可行:

resources :shows, :constraints => { :id => /[0-9]+/ }
match "shows/:country" => "shows#index", :constraints => { :country => /[a-z]+/ }

注意,通常这可以通过get查询参数来完成,例如http://example.com/shows?country=canada,已经转到您的shows#index操作,params[:country]设置为"canada"

答案 1 :(得分:0)

您可能会受到期望/{controller}/{action}和相应路由的默认路由的攻击。尝试删除默认路由。您必须确保声明所有路线,但结果是一套更可预测的应用路线。