2012-07-03 21 views
1

所以,我有以下鏈接到:的Rails沒有找到控制器動作

<%= link_to(outing_add_guests_path, :class => 'modal') do %> 
<div id="notImportant"></div> 
<% end %> 

當我點擊它,Rails的告訴我,

No route matches {:controller=>"outings", :action=>"add_guests"} 

然而,這裏是我的路線文件:

resources :outings do 
    get "/add_guests" => "outings#add_guests" 
    post "/add_guests" => "outings#add_guests" 
    delete "/remove_guests" => "outings#remove_guests" 
end 

,並從我的郊遊控制器相應的動作:

def add_guests 
    @outing_guest = OutingGuest.new(:outing_id => params[:outing_id]) 
    @outing_guest.user_id = params[:user_id] 
    if @outing_guest.save 
     flash[:notice] = "Guest added successfully" 
     redirect_to({ :action => 'outing', :id => params[:outing_id] }) 
    else 
     flash[:notice] = "Guest could not be added" 
     redirect_to({ :action => 'outing', :id => params[:outing_id] }) 
    end 
end 

是否有任何理由Rails將無法檢測到我的控制器或其操作?

編輯:下面是結果的一部分,從耙路線

  outing_add_guests GET /outings/:outing_id/add_guests(.:format)    outings#add_guests 
           POST /outings/:outing_id/add_guests(.:format)    outings#add_guests 

回答

1

我注意到你link_to不與其他路線

outing_add_guests_path 
outings_add_guests_path 

你做rake routes驗證outing_add_guests_path存在一致?

編輯:

rake routes顯示你需要一個outing_id所以你的路由不(至少不爲POST)設置正確。我會按照@RyanBigg的建議修正它們。

+0

我試着將它改爲outings_add_guests_path,但它表示該方法未定義。我已將我的耙路添加到上方。 –

+0

您的路線設置不正確。看到我的編輯 – Dty

+0

是的,那實際上是問題所在。這是一個新的郊遊的觀點,但添加嘉賓是爲了增加客人到現有的郊遊,所以它需要一個outing_id。 –

1

你應該使用collection方法來定義這些路線:

resources :outings do 
    collection do 
    get :add_guests 
    post :add_guests 
    delete :remove_guests 
    end 
end 

這將完成的是定義爲指定動作新航線,以及自動定義的路由信息​​的助手。欲瞭解更多信息,請閱讀Routing Guide