gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 01:11:10 26 4
gpt4 key购买 nike

在我的 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当请求到达 Controller 时,对此的任何帮助都会非常有帮助!

最佳答案

您正在寻找的通常不称为“浅层路由”。

浅层路由,正如 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 resource(s)默认情况下,命令将支持这一点,但您可能可以使用手册来实现 match命令。这是我的头顶:
match ":city_id", :controller => "cities", :action => "show"
match ":city_id/:neighborhood_id", :controller => "neighborhoods", :action => "show"

这仍然是基于 RESTful/资源的,只是没有使用标准的 Rails 命名路由方式。

关于ruby-on-rails - Rails 3 中的浅层路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7451173/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com