Не найдено ни одного маршрута [POST] - Отправка данных в Ruby on Rails - PullRequest
3 голосов
/ 11 августа 2011

Я пытаюсь отправить данные в мое приложение Ruby on Rails через запрос AJAX POST.Это прекрасно работает на странице индекса, где он просто принимает запрос POST и принимает параметр для использования, например params[:MyParam], однако, при попытке сделать то же самое в моем действии show, я получаюошибка:

Не найдено ни одного маршрута [POST]

Я отправляю запрос POST так:

 <% if !params[:recData] %>
var PostDone = false;
 <% end %>
 $(document).ready(function() {
   $.post(document.URL, { recData: "POST REQUEST!" }, function(response) { 
  if(PostDone == false) {
    document.write(response);
    PostDone = true;
  }
  });
 });

Я вроде какновичок в AJAX и Rails, так что мы очень ценим руку помощи.

Ответы [ 2 ]

2 голосов
/ 11 августа 2011

Хорошо, прежде всего, если вы прочитаете это , вы знаете, что resources :products добавляет следующий маршрут

Verb    Path    action  used for
POST  /products create  create a new product

также маршруты сопоставляются сверху, так как у вас есть

resources :products # matches '/products' via POST
match '/products' => 'products#index', :via => :post

каждый раз, когда у вас есть POST-запрос к '/products' первому маршруту, определенному с resources :products, совпадает

show действие работает, потому что оно также определено с помощью resources :products, но только для метода GET

теперь обходные пути

изменить порядок на

match '/products' => 'products#index', :via => :post
resources :products # never matched '/products' via POST

или используйте :except

resources :products, :except => :create # does not match '/products' via POST
match '/products' => 'products#index', :via => :post

в обоих случаях ваше create действие будет более новым

1 голос
/ 11 августа 2011

Попробуйте заменить document.URL в функции $.post на фактический URL, который вы публикуете, например, вставив его через Rails следующим образом:

$.post('<%= objects_path %>', ...

Конечно, замените objects_path на то, что называется вашим названным маршрутом.

Причина, по которой вы получаете ошибку, возможно, в том, что действия index и create имеют один и тот же URL (только с другим глаголом HTTP), а действие show имеет совершенно другой. В вашем jQuery вы всегда используете URL-адрес текущей страницы, который просто работает с действием index, но не на любой другой странице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...