【问题标题】:Nested resources and pretty urls嵌套资源和漂亮的网址
【发布时间】:2012-05-05 00:10:04
【问题描述】:

我有 2 个模型:

  1. 运动
  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

但仅此而已。我不知道如何获取嵌套资源,或者我是否做错了什么。

【问题讨论】:

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


    【解决方案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”的结果。

    【讨论】:

      猜你喜欢
      • 2011-02-04
      • 1970-01-01
      • 1970-01-01
      • 2011-09-19
      • 2014-04-22
      • 2012-03-07
      • 1970-01-01
      • 2017-07-27
      • 2011-10-03
      相关资源
      最近更新 更多