Почему я получаю ошибку «нет маршрута» при удаленной публикации или удаленном обновлении сообщения?

#ruby-on-rails #ruby-on-rails-3 #error-handling

#ruby-on-rails #ruby-on-rails-3 #обработка ошибок

Вопрос:

Немного предыстории: у меня есть контроллер сообщений, который используется пользователями для создания или обновления сообщений. В форме сообщения пользователь начинает писать свое сообщение. Это сообщение может быть либо сохранено как черновик (а затем форма переключает функциональность на отправку в действие «обновить» контроллера), а затем опубликовано на странице или напрямую опубликовано на странице.

Эти формы удаленно публикуются на странице, которая добавляет таблицу с записью внутри.

В настоящее время у меня проблема: отправка формы прерывается, потому что при добавлении таблицы я получаю ошибку «ActionView::Template::Error (Маршрут не соответствует {:action =>»vote», :controller =>»posts», :post_id => 245,:positive=> true}) «. Это относится к строке кода в представлении сообщений:

  <%= link_to (image_tag("icons/upvote.png", :height => "15px")), vote_post_path(:post_id => post.id, :positive => true), :remote => true %>
  

Я должен упомянуть, что добавление сообщения в таблицу выполняется с помощью переменной @post, которая остается доступной из контроллера.

ТЕПЕРЬ самое странное, что эта ошибка возникает ТОЛЬКО тогда, когда сообщение было отправлено непосредственно в действие «создать» и пытается добавить таблицу с сообщением. Когда сохраненный черновик отправляется в действие «обновить» и добавляется в таблицу, этого не происходит.

У кого-нибудь есть какие-либо советы относительно того, почему это так? Я могу предоставить больше кода, где это уместно.

РЕДАКТИРОВАТЬ: соответствующий раздел моего файла маршрутов:

  resources :posts do
   member do
     get :vote
   end
 end
  

Комментарии:

1. можете ли вы опубликовать свой файл маршрутов

2. привет, я добавил соответствующий раздел моего файла маршрутов, спасибо!

Ответ №1:

проблема в том, что у вас есть действие «проголосовать» как действие участника, а не действие сбора. Переключите его на:

  resources :posts do

   collection do
      get :vote 

   end
 end
  

Ответ №2:

Попробуйте это и посмотрите, что произойдет:

 resources :posts do
  resources :votes 
end
  

Комментарии:

1. привет, еще раз спасибо за ваши ответы. Это приводит к появлению ошибки для всех частичных сообщений, даже для сохраненных. Есть идеи, почему?