基本Rails 3路由问题

时间:2011-07-31 23:48:43

标签: ruby-on-rails rails-routing

我正在尝试在我正在处理的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

1 个答案:

答案 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]

进入您的方法