0

我正在尝试在我正在处理的 Rails3 应用程序中创建一些干净的 URL……但我很难理解如何(或者如果我什至应该)自定义我的路由以使其工作。

这是示例:

我有一个商店列表。每个商店都属于一个类别(健康、运动等)。每个商店都有一个位置。

我有两种方式来呈现数据。一个显示是目录类型结构中所有商店的列表,另一个显示在地图上。

理想情况下,我希望我的 URL 可以像这样工作:

/stores/health/map(或/stores/map/health)仅在地图上显示健康存储(本质上,地图参数影响显示哪个视图,但仍使用索引控制器......使用集合在我的路线中似乎不适合)

我想要的另一个 URL 是 /stores/sports/ 以仅在目录视图(默认)中显示体育用品商店...

我不完全清楚如何操纵路线来处理这个......

这是我当前的路线,它并没有真正为我做这件事:

resources :stores do
  collection do
    get 'map'
  end
end

最重要的是,我希望能够在不使用 ?query=params... 的情况下添加过滤器,所以:

/stores/sports/hockey ,基本上只会过滤掉曲棍球商店......

使用 ?query 执行此操作没有任何问题,它只是将我的参数放入我想要实现的更好的 URL 中。

该文档似乎没有概述我正在尝试做的事情,所以我假设我尝试做的事情是错误的。

这是破坏 REST 吗?我是在向后看吗?

谢谢你的帮助,JD

4

1 回答 1

1

这个你可能想多了。:-)

如果您想将“stores/health/map”的 HTTP Get 路由到具有操作名称的 StoresController,例如 health_map,您需要做的是:

get 'stores/health/map' => 'stores#health_map'

任何是干净的 URL 并且不修改数据并使用 HTTP GET 的东西都是 RESTful。(这来自一本关于 REST 的书的合著者)。当您希望修改数据时,您需要更加小心地使用方法。

要进行过滤,请尝试以下操作:

get '/stores/sports/:filter' => 'stores#sports'

过滤器的值将作为params[:filter]

于 2011-08-01T01:40:26.217 回答