将GET和POST收集路由添加到资源路由

时间:2011-09-07 15:44:01

标签: ruby-on-rails ruby http rest

情况

我有一个可以访问的资源FootballPlayer:

GET /clubs/id/football_players

但是,我想要一种方法只能访问所选的足球运动员,如下所示:

GET /clubs/id/football_players/selected

我在routes.rb中使用了以下代码:

resources :clubs do
  resources :football_players do
    collection do
      get 'selected'
    end
  end
end

当我访问该网址时,会触发selected的{​​{1}}操作。

问题

我还希望能够用一组其他足球运动员替换选择。这样做的逻辑请求是:

FootballPlayers

但是,如果我将POST /clubs/id/football_players/selected 添加到routes.rb,它会将请求重定向到相同的post 'selected'操作。

问题

如何让两条路线重定向到两个不同的动作?或者这不可能,我是否需要在动作中区分GET和POST?如果是这样,我该怎么做?

2 个答案:

答案 0 :(得分:9)

明确指定两种方法的操作:

resources :clubs do
  resources :football_players do
    collection do
      get  'selected', :action => 'list_selected'
      post 'selected', :action => 'change_selected'
    end
  end
end

答案 1 :(得分:0)

<强> [编辑]

没有尝试过上面的答案,但我认为区别在于生成的路线。对于这种情况,它将是clubs_football_players_selected_pathclubs_football_players_change_selected_path。另一方面,两条路径都是clubs_football_players_selected_path(我只是猜测)。

resources :clubs do
  resources :football_players do
    collection do
      get :selected # or... get  :list_selected, path: 'selected'
      post :change_selected, path: 'selected'
    end
  end
end