我已经设置了自定义路线,它似乎有效。但是,我也有一个资源路由也适用于同一个控制器。我想我只是做错了什么,但我不知道它是什么。我老老实实地乱砍路线,因为我仍然对如何设置它们以及何时使用什么方法感到困惑。
以下是我正在处理的路线。
resources :shows
match "shows/:country" => "shows#index"
像这样的路线是资源:显示效果很好,但不匹配。如果我翻转它们匹配路线工作正常,但资源:显示没有。
我应该将其作为命名空间路由吗?我不确定我应该做什么。我想要完成的是这样的事情。
http://site.com/shows/canada
这将返回所有Candian节目。
感谢任何帮助。
答案 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}
和相应路由的默认路由的攻击。尝试删除默认路由。您必须确保声明所有路线,但结果是一套更可预测的应用路线。