在我的rails 3应用程序中使用我的路线时,我希望有这样的浅路线:
/san-francisco/union-square
Run Code Online (Sandbox Code Playgroud)
但我的路由器坚持让他们这样:
/cities/san-francisco/neighborhoods/union-square
Run Code Online (Sandbox Code Playgroud)
我用它来做我的 routes.rb
shallow do
resources :cities do
resources :neighborhoods do
resources :locations
end
end
end
Run Code Online (Sandbox Code Playgroud)
但我仍然有这个:
city_neighborhood_locations GET /cities/:city_id/neighborhoods/:neighborhood_id/locations(.:format)
Run Code Online (Sandbox Code Playgroud)
不应该看起来像:
city_neighborhood_locations GET /:city_id/:neighborhood_id/:id(.:format)
Run Code Online (Sandbox Code Playgroud)
我不知道如何解决这个问题,另外我不确定我的链接是什么问题,我希望能够使用语法:
link_to neighborhood.name, [:city, neighborhood]
Run Code Online (Sandbox Code Playgroud)
但这似乎颠倒了:id,:neighborhood_id当请求到达控制器时,对此的任何帮助真的会非常有用!
Cra*_*ker 12
你正在寻找的东西通常不被称为"浅路由".
正如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
Run Code Online (Sandbox Code Playgroud)
没有浅路由,最后一条路线将是:
city_neighborhood GET /cities/:city_id/neighborhoods/:neighborhood_id
Run Code Online (Sandbox Code Playgroud)
浅路由允许您将资源嵌套在另一个资源(在本例中为城市下的邻域)下,但在不需要嵌套时为嵌套资源提供绝对/非嵌套路由.
当您使用不依赖于父资源的ID的唯一标识符引用嵌套资源时,这是有意义的.在你的例子中,这不是真的(在旧金山之外可能有一个"联合广场";肯定会有像"唐人街"这样的重复),所以你可能不希望这种情况下的浅路线.
你想要的是依赖于位置的路由,其中假定/固定资源的类型取决于它在URL中出现的位置.(例如,根据您概述的计划,除了"邻居"之外,您不能拥有"城市".)
我不认为resource(s)默认情况下Rails 命令会支持它,但您可以使用手动match命令来执行此操作.这不是我的头脑:
match ":city_id", :controller => "cities", :action => "show"
match ":city_id/:neighborhood_id", :controller => "neighborhoods", :action => "show"
Run Code Online (Sandbox Code Playgroud)
这仍然是RESTful /基于资源的,它只是没有使用标准的Rails命名路由方式.
| 归档时间: |
|
| 查看次数: |
2287 次 |
| 最近记录: |