我正在尝试在我正在处理的Rails3应用程序中创建一些干净的URL ...但我很难理解如何(或者我是否应该)自定义我的路由以使其工作。
以下是示例:
我有一个商店列表。每个商店属于一个类别(健康,体育等)。每家商店都有一个位置。
我有两种方式可以呈现数据。一个显示是目录类型结构中所有商店的列表,另一个是在地图上。
理想情况下,我希望我的网址可以像这样工作:
/ stores / health / map(或/ stores / map / health)仅显示地图上的健康存储(其中map参数实际上影响显示哪个视图,但仍然使用索引控制器...在我的路线中使用一个集合似乎不适合)
我想要的另一个网址是/ stores / sports /在目录视图中显示体育商店(默认),例如......
我并不完全清楚如何操纵路线来处理这个...
这是我当前的路线,它并没有真正为我做这件事:
resources :stores do
collection do
get 'map'
end
end
最重要的是,我希望能够在不使用?query = params的情况下添加过滤器......所以:
/ stores / sports / hockey,基本上只过滤掉曲棍球商店......
我这样做没有问题吗?查询,它只是将我的参数放入一个我想要实现的更好的URL。
文档似乎没有概述我想要做的事情,所以我假设我想做的事情是错误的。
这会破坏REST吗?我向后看着它吗?
感谢您的帮助,JD
答案 0 :(得分:1)
你可能会过度思考这个问题。 : - )
如果您想将“存储/健康/地图”的HTTP获取路由到StoresController,其行动名称为,例如health_map,您需要做的是:
get 'stores/health/map' => 'stores#health_map'
任何干净的URL并且不修改数据并使用HTTP GET的东西都是RESTful。 (这来自一本关于REST的书的合着者)。当您希望修改数据时,需要更加小心使用方法。
要进行过滤,请尝试以下操作:
get '/stores/sports/:filter' => 'stores#sports'
过滤器的值将作为params[:filter]