1

だから、私は次のリンクを持っています:へ。

 <%= 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
4

2 に答える 2

1

collection次の方法を使用して、これらのルートを定義する必要があります。

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

これにより、指定されたアクションの新しいルートが定義され、それらのルートのルーティングヘルパーが自動的に定義されます。詳細については、ルーティングガイドをお読みください。

于 2012-07-03T01:29:56.550 に答える
1

link_toあなたが他のルートと一致していないことに気づきました

outing_add_guests_path
outings_add_guests_path

それが存在するrake routesことを確認するために行いましたか?outing_add_guests_path

編集:

あなたのrake routesショーはあなたが必要としているouting_idので、あなたのルートは正しくセットアップされていません(少なくともPOSTでは)。@RyanBiggが提案している方法で修正します。

于 2012-07-03T01:25:42.170 に答える