没有路由匹配[POST] - 将数据发送到Ruby on Rails

时间:2011-08-11 10:21:41

标签: jquery ruby-on-rails ajax http-post

我正在尝试通过AJAX POST请求将数据发送到我的Ruby on Rails应用程序。 这在索引页面上工作正常,它只接受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 个答案:

答案 0 :(得分:2)

首先,如果您阅读this,您知道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

每次您对'/products'第一条路线的POST请求都匹配

resources :products操作有效,因为它也是使用show定义的,但仅适用于GET方法

现在解决方法

将订单更改为

resources :products

或使用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 操作都会更新匹配

答案 1 :(得分:1)

尝试将document.URL功能中的$.post替换为您要发布到的实际网址,例如像这样通过Rails插入它:

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

当然,将objects_path替换为您调用的命名路由。

您收到错误的原因可能是indexcreate操作具有相同的URL(仅使用不同的HTTP谓词),但show操作完全有效不同的。在您的jQuery中,您总是使用当前页面的URL,恰好与index操作一起使用,但不能在任何其他页面上使用。