以任何顺序嵌套路由

时间:2017-01-13 16:08:27

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

在我目前正在处理的网络应用中,数据最初显示为一个表格,显示来自数据库的SKU数据。我们有三个仓库,一组我们想要实施的过滤器,以及一系列我们想要实施的类型。

有没有办法可以实现这样的事情:

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

../warehouse/:warehouse/..

../filter/:filter_id/..

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

1 个答案:

答案 0 :(得分:0)

你有没有试过像:

  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下的命名路由中看到此内容。