/san-francisco/union-square
但我的路由器坚持让他们这样:
/citIEs/san-francisco/neighborhoods/union-square
我已将它用于我的routes.rb
shallow do resources :citIEs do resources :neighborhoods do resources :locations end endend
但我仍然有这个:
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/neighborhoodsnew_city_neighborhood GET /citIEs/:city_ID/neighborhoods/new(create_city_neighborhood) POST /citIEs/:city_ID/neighborhoodsneighborhood 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命名路由方式.
总结以上是内存溢出为你收集整理的ruby-on-rails – Rails中的浅路由3全部内容,希望文章能够帮你解决ruby-on-rails – Rails中的浅路由3所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)