2012-07-03 4 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 не сможет обнаружить мой контроллер или его действия?

EDIT: Вот часть результатов от граблей маршрутов

  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 существует?

EDIT:

Ваш rake routes показывает вам нужен outing_id, чтобы ваши маршруты не установка правой (по крайней мере, не для POST). Я бы исправил их так, как предлагает @RyanBigg.

+0

Я попытался изменить его на outings_add_guests_path, но он сказал, что метод не определен. Я добавил маршрут грабли вверх. –

+0

Ваши маршруты не настроены правильно. см. мое редактирование – Dty

+0

Да, это была проблема. Это представление для нового Outing, но Add Guests было написано, чтобы добавить гостей в существующую прогулку, поэтому для этого требуется outing_id. –

1

Вы должны определить эти маршруты с помощью метода collection:

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

Что это будет сделать, это определить новые маршруты для указанных действий, а также автоматически определяя помощник маршрутизации для этих маршрутов. Для получения дополнительной информации, пожалуйста, прочитайте Routing Guide.

Смежные вопросы