我正在尝试通过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的新手,所以非常感谢你的帮助。
答案 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
替换为您调用的命名路由。
您收到错误的原因可能是index
和create
操作具有相同的URL(仅使用不同的HTTP谓词),但show
操作完全有效不同的。在您的jQuery中,您总是使用当前页面的URL,恰好与index
操作一起使用,但不能在任何其他页面上使用。