Rails 3路由多个参数?

时间:2011-08-11 01:31:00

标签: ruby-on-rails-3 routes

这可能是一个基本问题,我甚至不确定它是否可行,但这里也是如此。

如果我有一个由事件组成的事件模型,并且URL是/ events来查看所有事件,而/ events /:id则用于查看单个事件...我还可以执行类似/ events /:status的操作重定向到索引控制器并根据状态显示say,previous,inactive事件等,还保留/ events /:id功能?

基本上是这样的:

/ events / 17会带我参加第17个活动,而event / previous会带我到所有已经过去的活动列表。

这可能吗?如果是这样,我将如何设置路线?

我试过了:

match "/events/:status" => "events#index"

resources :events

但是这只是覆盖了:id one,所以我再也无法参加个别活动了。我还在学习rails的所有术语,所以我的搜索能力有限。

2 个答案:

答案 0 :(得分:1)

试试这个:

match "/events/previous" => "events#index", :defaults => { :status => 'previous' }

这假设您的状态是限制编号,因此您可以手动在线定义所有这些状态。

答案 1 :(得分:1)

您可以使用细分键约束来设置路线。

例如,

match "/events/:id" => "events#show", :constraints => { :id => /\d+/ }

match "/events/:status" => "events#index", :constraints => { :status => /\w+/ }

在这种情况下,/events/17将路由到事件控制器中的show动作,而/events/previous将路由到索引操作。

如果需要,您可以将状态限制设置为更具体,但我认为这应该有效。