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

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

我正在尝试通过 AJAX POST 请求将数据发送到我的 Ruby on Rails 应用程序。 这在索引页面上工作得很好,它只接受 POST 请求并获取参数以供使用,例如 params[:MyParam],但是当尝试执行完全相同相同的操作时在我的 show 操作中,我收到错误:

No route matches [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 不太熟悉,因此非常感谢您的帮助。

最佳答案

首先,如果您阅读 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 操作之所以有效,是因为它也是使用 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 操作都会更新匹配

关于jquery - 没有路线匹配 [POST] - 将数据发送到 Ruby on Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7024210/

相关文章:

Javascript Websocket 监听端口 80

javascript - 如何获取单击按钮的数据属性值?

javascript - Jquery 隐藏 mouseenter 上的图像不起作用

ruby-on-rails - 如何更新 has_many :through association with strong parameters in Rails 4

ruby-on-rails - 使用 rspec 进行测试时,将常见的 "test utility methods"放在哪里?

javascript - 对象的属性 '$'

ruby-on-rails - Rails 未定义的方法

javascript - "Push"通知用户

javascript - 如何在JS中使用ajax请求的结果?

php - Laravel 使用 Request 对象重定向到 Controller 操作