嵌套资源和漂亮的网址
Posted
技术标签:
【中文标题】嵌套资源和漂亮的网址【英文标题】:Nested resources and pretty urls 【发布时间】:2012-05-05 00:10:04 【问题描述】:我有 2 个模型:
-
运动
比赛
在我的 routes.rb 中我通常会这样做
resources :sports, :only => [:index, :show] do
resources :competitions, , :only => [:index, :show]
end
这给了我像/sports/1/competitions/4
这样的网址
但我想要的是NOT :controller/:id
,而是直接将:name
作为路径,就像/soccer/euro2012
我可以通过这样做获得第一部分:
match "/:sports_name" => "sports#show", :as => :sport
在我的控制器中:
def show
@sport = Sport.find_by_name(params[:sports_name])
end
但仅此而已。我不知道如何获取嵌套资源,或者我是否做错了什么。
【问题讨论】:
【参考方案1】:让我们先制作嵌套资源,如果你真的需要它们,然后处理漂亮的 url:
# nested resources:
resources :sports, :only => [:index, :show] do
resources :competitions, , :only => [:index, :show]
end
# pretty urls:
match "/show/:sport_name/:competition_name" => "competitions#show"
您首先需要“/show”,否则这条路线也会将所有其他路线(如/sports/new)路由到competitions#show
。当然,您可以将其重命名为最适合您的情况。
现在您可以通过params[:sport_name]
访问这项运动,并通过params[:competition_name]
在competitions#show
中进行比赛。
如果您希望 rails 为您生成路径,请在路径中添加一些代码:
match "/show/:sport_name/:competition_name" => "competitions#show", :as => "some_name"
并生成如下路径:
some_name_path( "sport", "competition" )
这应该会导致类似“/show/sport/competition”的结果。
【讨论】:
以上是关于嵌套资源和漂亮的网址的主要内容,如果未能解决你的问题,请参考以下文章
曾经霸榜 GitHub:漂亮开源的 Linux 资源监视工具