Usando HTTP PUT para enviar JSON com Jquery e Rails 3
O HTTP PUT não é inteiramente entre navegadores; portanto, o Rails (eu estou usando o Rails 3) suporta o uso do POST e passa o_method
query param. Isso é ótimo, mas parece não funcionar ao enviar JSON.
Exemplo:
$.ajax({
url: window.location.pathname,
type: 'POST',
contentType: 'application/json',
data: JSON.stringify({_method:'PUT', page:{my_data: 1}),
dataType: 'json'
});
Quando o Rails vê isso, ele não reconhece a substituição '_method' porque é passada no formato JSON (talvez essa conversão seja posterior?). O Rails retorna um erro "Nenhuma rota corresponde ...", dizendo que não pode encontrar a rota (para o recurso), presumo que não corresponda ao verbo REST update = HTTP PUT, eu até tentei anexá-lo a o URL:?_method=PUT
mas obteve o mesmo resultado.
A única coisa quefaz parece funcionar está definindo um cabeçalho HTTP:
$.ajax({
url: window.location.pathname,
type: 'POST',
contentType: 'application/json',
data: JSON.stringify({my_data: 1}),
dataType: 'json',
beforeSend: function(xhr){
xhr.setRequestHeader("X-Http-Method-Override","put");
}
});
A melhor maneira de definir o cabeçalho de substituição HTTP?