在处理Rails 4应用程序时,我多次偶然发现了以下问题:
说我有一个模型,Task
。
open
,in progress
或closed
。normal
,high
,critical
。现在,我想展示每种可能性的任务列表。因此,在我的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语句。
如何妥善解决?有更好的方法吗?