Rails嵌套路由

时间:2012-02-24 20:07:27

标签: ruby-on-rails routes

我希望有以下路线:

sports/1

为id = 1的运动调用show方法。

sports/about/1

显示id为1的运动的“关于”页面。

现在我有:

 resources :sports
routes.rb中的

如果我试着去

sports/about/1

我收到错误,因为当然没有运动有关于=。

我可以这样做吗?

修改

为了澄清,我的about只是sports_controller行动。感谢两种方法(控制器和动作)

4 个答案:

答案 0 :(得分:4)

你可以使用rails路径做任何你想做的事。

编辑:现在是一个更完整(和正确)的解决方案:

首先在体育资源中声明一个新的REST动作:

resources :sports do
  get 'about', :on => :member
end

然后,要将正常网址行为 url / sports / id / about 更改为 url / sports / about / id ,您应该使用:

match 'sports/about/:id', :controller => 'sports', :action => 'about'}

答案 1 :(得分:1)

这应该照顾你的路线,但你真的应该check out the RailsGuides关于这个主题。

resources :sports do
  resources :about
end

这将为您提供sports/:sport_id/about/:id等路线。当然,您需要在form_for(@sport, @about) do |f|电话或类似的内容中设置运动的价值。

答案 2 :(得分:0)

routes.rb中以相同的顺序编写以下内容

match 'sports/about/:id' => 'sports#show', :as => :sport
resources :sports

显示运动用sport_path(@sport)

答案 3 :(得分:0)

我认为这是最直接的方式:

resources :sports do
 collection do
resources 'about'
end
end

或者也许:

namespace :sports do
 resources 'about'
end

取决于您是否需要单独的控制器。