如何正确制作具有多个可选段的Rails路由?

时间:2016-01-03 22:01:28

标签: ruby-on-rails routing

在处理Rails 4应用程序时,我多次偶然发现了以下问题:

说我有一个模型,Task

  • 任务可以具有不同的状态,例如openin progressclosed
  • 任务可以具有不同的优先级,例如normalhighcritical

现在,我想展示每种可能性的任务列表。因此,在我的Routes文件中,我创建了以下内容:

resources :tasks do
  get "status/:status", action: :index, on: :collection, as: :status_list
  get "priority/:priority", action: :index, on: :collection, as: :priority_list
end

index操作会检查params[:status]是否存在,如果存在,则过滤任务集合以仅使用具有给定状态的任务集合。它还检查tag参数,并将任务集合过滤为仅具有给定优先级的任务集合。

但是,我想结合这两种过滤方式(以不使用GET参数的方式)。

这就是我的尝试:

resources :tasks do
  get "list/(:status/(:priority))", action: :index, on: :collection, as: :list
end

然而,这有以下问题:尝试仅使用优先级的路径助手时,例如在调用list_tasks_path(priority: :high)时,生成的网址会恢复为tasks/list,因为网址片段缺失。

这个问题可以通过为优先级添加路由来缓解,但是每次我想在两个链接之间切换时,我需要在视图中添加一个if语句。

如何妥善解决?有更好的方法吗?

0 个答案:

没有答案