0

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

这是我现在正在处理的路线。

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

像这样的路线是资源 :shows 工作得很好,但不是匹配。如果我翻转它们,匹配路线可以正常工作,但资源 :shows 不能。

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

http://site.com/shows/canada

这将返回所有 Candian 节目。

任何帮助表示赞赏。

4

2 回答 2

2

您可能想要做的是使用约束,甚至可能是自定义约束类。这是一个粗略的开始,我没有测试过并且不确定它是否会起作用:

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

请注意,通常这将通过获取查询参数来完成,例如http://example.com/shows?country=canada,它已经执行您的shows#index操作并params[:country]设置为"canada"

于 2011-02-28T00:30:22.710 回答
0

您可能会被期望/{controller}/{action}和相应路由的默认路由咬伤。尝试删除默认路由。您必须确保声明所有路线,但结果是为您的应用程序提供了一组更可预测的路线。

于 2011-02-28T00:37:25.667 回答