嵌套资源和漂亮的网址

时间:2012-04-24 10:55:04

标签: ruby-on-rails routing friendly-url

我有2个型号:

  1. 运动
  2. 竞争
  3. 在我的routes.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
    

    但那是关于它的。我不知道如何获取嵌套资源,或者我是否正在做一些根本错误的事情。

1 个答案:

答案 0 :(得分:2)

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

# 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”的内容。