加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails中的浅路由3

发布时间:2020-12-17 01:45:42 所属栏目:百科 来源:网络整理
导读:在我的rails 3应用程序中使用我的路线时,我希望有这样的浅路线: /san-francisco/union-square 但我的路由器坚持让他们这样: /cities/san-francisco/neighborhoods/union-square 我已将它用于我的routes.rb shallow do resources :cities do resources :nei
在我的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命名路由方式.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读