rails redirect_to错误地将我发送到更新路由

时间:2015-10-21 19:02:15

标签: ruby-on-rails

我将此作为我的更新路线:

def update
   params.require(:player_id)
   params.require(:id)

   @draft = Draft.find(params[:id])
   redirect_to draft_draftees_path(@draft.id)
end

每当它进行重定向时,它会尝试执行put而不是获取到索引路由,因此它说: 没有路线匹配[PUT]“/ drafts / 28 / draftees”

我不知道为什么它会尝试做一个看跌期权。是因为它来自更新功能吗?我在这个页面上使用React,那么它与它有关吗?如何在更新路由中重定向到该索引路由?请帮忙!

[更新]这是我的routes.rb:

Rails.application.routes.draw do
  get 'welcome/index'

  get '/login' => 'sessions#new'
  post '/login' => 'sessions#create'
  get '/logout' => 'sessions#destroy'

  get '/signup' => 'users#new'
  post '/users' => 'users#create'

  root 'welcome#index'

  resources :users
  resources :drafts do
    resources :teams
    resources :draftees
    resources :players
  end
end

1 个答案:

答案 0 :(得分:0)

更改

redirect_to draft_draftees_path(@draft.id)

redirect_to draft_draftees_path(@draft)

因为它会将完整的草稿实例传递给被驱逐者的路径。 put请求的形成是因为你将@ draft.id传递给draftees路径,导致这样的请求

/drafts/:draft_id/draftees/:id

<强>更新 由于您使用的是嵌套资源,因此可能有两种重定向方式。

  1. 重定向到 / drafts /:draft_id / draftees ,这将显示特定草稿的所有被选举者。
  2. 重定向到 / drafts /:draft_id / draftees /:id ,其中显示了更新后的受让人。
  3. 要获得第二个,您需要重定向为:

    redirect_to(draft_draftees_path(@draftee.draft, @draftee)