【问题标题】:Nesting routing in any order以任意顺序嵌套路由
【发布时间】:2017-01-13 16:08:27
【问题描述】:

在我目前正在开发的 Web 应用程序中,数据最初以表格的形式呈现,显示来自数据库的 SKU 数据。我们有三个仓库、一组我们想要实现的过滤器和一组我们想要实现的分类。

有没有办法我们可以实现这样的东西:

../sort/:sortcol/:sort_type/..

../warehouse/:warehouse/..

../filter/:filter_id/..

因此,如果用户只是执行/warehouse/A,它会返回仅包含在仓库 A 中的所有内容。如果用户转到 /warehouse/A/sort/sku/asc,它会从仓库 A 获取数据,然后按 SKU 升序对其进行排序。我还希望这些以任何顺序可用 - 也就是说,可以在过滤器之前或之后调用排序。如何做到这一点?

【问题讨论】:

  • 保持路径排序并为此使用查询参数可能会简化?例如/warehouse/A?sort=sku&direction=asc?
  • 它更简单,但我很好奇是否有办法做到这一点,部分原因是我更喜欢它,但部分原因是我想在这方面学习新东西。另外,我希望基本上只写仓库,排序和过滤一次然后调用它们,用这种方法仍然可以管理吗?

标签: ruby-on-rails ruby routing rails-routing


【解决方案1】:

您是否尝试过类似的方法:

  resources :warehouses do
    get 'sort/*sortcol/*sort_type', to: 'warehouses#index'
  end
  get 'sort/*sortcol/*sort_type/warehouses/*warehouse_id', to: 'warehouses#index'

这应该会给你类似的东西:

                GET    /warehouses/:warehouse_id/sort/*sortcol/*sort_type(.:format)  warehouses#index
     warehouses GET    /warehouses(.:format)                                         warehouses#index
                POST   /warehouses(.:format)                                         warehouses#create
  new_warehouse GET    /warehouses/new(.:format)                                     warehouses#new
 edit_warehouse GET    /warehouses/:id/edit(.:format)                                warehouses#edit
      warehouse GET    /warehouses/:id(.:format)                                     warehouses#show
                PATCH  /warehouses/:id(.:format)                                     warehouses#update
                PUT    /warehouses/:id(.:format)                                     warehouses#update
                DELETE /warehouses/:id(.:format)                                     warehouses#destroy
                GET    /sort/*sortcol/*sort_type/warehouses/*warehouse_id(.:format)  warehouses#index

然后您可以在warehouse_controller#index 中检查一些参数以确定是进行排序索引还是常规索引。

附带说明一下,我认为在处理单个仓库时,约定是使用warehouses/:id。不是warehouse/:id。您可以在 warehouse_path 下的命名路由中看到这一点。

【讨论】:

  • 老实说,我希望有一些更灵活的东西——/sort/sku/asc/warehouse/a/warehouse/a/sort/sku/asc 是等价的。如果它无法管理,那没关系,我只是好奇和希望:)
猜你喜欢
  • 2016-10-05
  • 2021-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-18
  • 1970-01-01
相关资源
最近更新 更多