2010-11-02 2 views
3

В моем приложении у меня есть RecipesController и commentController. Все комментарии принадлежат рецепту и могут быть проголосованы. Вот отрывок из моего routes.rb:Ошибка маршрутизации Rails с вложенными ресурсами

resources :recipes do 
    member do 
     put 'vote_up' 
     post 'comment' 
    end 

    resources :comments do 
     member do 
     put 'vote_up' 
     end 
    end 
    end 

Если я бег рек маршрутов, я считаю следующий маршрут выхода:

vote_up_recipe_comment PUT /recipes/:recipe_id/comments/:id/vote_up(.:format) {:action=>"vote_up", :controller=>"comments"} 

CommentsController имеет метод, называемый vote_up.

Кроме того, ссылки на маршрут работ (с моей точки зрения)

<%= link_to 'Vote up', vote_up_recipe_comment_path(@recipe, comment), :method => 'put' %> <br /> 

Однако, нажав на эту ссылку дает мне следующую ошибку:

Routing Error 

No route matches "/recipes/7/comments/4/vote_up" 

Что мне не хватает? Я не уверен, как отлаживать это, потому что, насколько я вижу, маршрут должен совпадать.

ответ

5

Я думаю, что вы получите это сообщение об ошибке, потому что запрос выполняется с помощью метода HTTP GET, а не PUT.

Чтобы создать ссылки, использующие метод POST/PUT/DELETE, ваше приложение должно правильно загрузить Javascript Rails-адаптер.

Убедитесь, что ваше приложение имеет jQuery (http://github.com/rails/jquery-ujs) или адаптер Prototype JS и что ваш макет правильно загружает его.

+0

Спасибо большое, что сделал трюк. Я действительно удалил некоторые из файлов javascript. Оглядываясь назад, это очевидно, но, вероятно, мне понадобилось много времени, чтобы найти. –

3

попробовать следующий твик: отправить метод пут, как символ

<%= link_to 'Vote up', vote_up_recipe_comment_path(@recipe, comment), :method => :put %>

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