嵌套的资源和漂亮的网址



>我有 2 个模型:

  1. 运动
  2. 竞争

在我的路由.rb中,我通常会这样做

resources :sports, :only => [:index, :show] do
  resources :competitions, , :only => [:index, :show]
end

这给了我像/sports/1/competitions/4这样的网址

但我想要的不是:controller/:id,而是直接将:name作为路径,就像/soccer/euro2012

我可以通过这样做获得第一部分:

match "/:sports_name" => "sports#show", :as => :sport

在我的控制器中:

def show
  @sport = Sport.find_by_name(params[:sports_name])
end

但仅此而已。我不知道如何获取嵌套资源,或者我是否做了一些根本性错误的事情。

如果你真的需要的话,让我们先制作嵌套的资源,然后处理漂亮的网址:

# 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]访问这项运动,并通过competitions#show params[:competition_name]访问比赛。

如果您希望 rails 为您生成路径,请在路由后附加一些代码:

match "/show/:sport_name/:competition_name" => "competitions#show", :as => "some_name"

并生成如下路径:

some_name_path( "sport", "competition" )

这应该会导致类似"/show/sport/competition"的内容。

相关内容

  • 没有找到相关文章

最新更新