【问题标题】:No route matches [POST] - Sending data to Ruby on Rails没有路线匹配 [POST] - 将数据发送到 Ruby on Rails
【发布时间】:2011-08-11 10:21:40
【问题描述】:

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

没有路线匹配 [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 的新手,非常感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:

    首先,如果您阅读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 操作都将被匹配

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

      • 如果无法确定命名路由,也可以直接指定,例如'/products',虽然我不推荐。重要的是 document.URL 在那里没有意义。
      • 如果服务器根本没有注册请求,你应该先检查源并检查 JavaScript 错误。
      • 正如我所说,create 方法与 POST 操作的 URL 与 index 操作相同,即它们通常都有 '/products',但其中一个是 GET ,另一个是POST
      • 实际上没有create 表单,我猜你指的是new 表单。无论如何,我强烈建议您在进一步阅读之前阅读本指南和本网站上的其他一些指南:edgeguides.rubyonrails.org/routing.html
      • 好吧,如果您对它一无所知,我建议您在实际编写代码之前尝试了解它,例如阅读我提到的指南。即使对于 Rails,您也需要知道一定的最低限度才能做任何事情。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-31
      • 1970-01-01
      相关资源
      最近更新 更多