ruby-on-rails – Rails中的浅路由3
在我的rails 3应用程序中使用我的路线时,我希望有这样的浅路线:
/san-francisco/union-square 但我的路由器坚持让他们这样: /cities/san-francisco/neighborhoods/union-square 我已将它用于我的routes.rb shallow do resources :cities do resources :neighborhoods do resources :locations end end end 但我仍然有这个: city_neighborhood_locations GET /cities/:city_id/neighborhoods/:neighborhood_id/locations(.:format) 不应该看起来像: city_neighborhood_locations GET /:city_id/:neighborhood_id/:id(.:format) 我不知道如何解决这个问题,另外我不确定我的链接是什么问题,我希望能够使用语法: link_to neighborhood.name,[:city,neighborhood] 但是当请求到达控制器时,似乎反转了:id和:neighborhood_id,对此的任何帮助都会非常有用! 解决方法
你正在寻找的东西通常不被称为“浅路由”.
正如Rails定义的那样,浅层路由看起来像这样: city_neighborhoods GET /cities/:city_id/neighborhoods new_city_neighborhood GET /cities/:city_id/neighborhoods/new (create_city_neighborhood) POST /cities/:city_id/neighborhoods neighborhood GET /neighborhoods/:neighborhood_id 没有浅路由,最后一条路线将是: city_neighborhood GET /cities/:city_id/neighborhoods/:neighborhood_id 浅路由允许您将资源嵌套在另一个资源(在本例中为城市下的邻域)下,但在不需要嵌套时为嵌套资源提供绝对/非嵌套路由. 当您使用不依赖于父资源的ID的唯一标识符引用嵌套资源时,这是有意义的.在你的例子中,这不是真的(在旧金山之外可能有一个“联合广场”;肯定会有像“唐人街”这样的重复),所以你可能不希望这种情况下的浅路线. 你想要的是依赖于位置的路由,其中??假定/固定资源的类型取决于它在URL中出现的位置. (例如,根据您概述的计划,除了“邻居”之外,您不能拥有“城市”.) 我不认为默认情况下Rails资源命令会支持它,但您可以使用手动匹配命令来执行此操作.这不是我的头脑: match ":city_id",:controller => "cities",:action => "show" match ":city_id/:neighborhood_id",:controller => "neighborhoods",:action => "show" 这仍然是RESTful /基于资源的,它只是没有使用标准的Rails命名路由方式. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |