Estoy en Rails 2.3.3 y necesito crear un enlace que envíe una solicitud de publicación.
Tengo uno que se parece a esto:
= link_to('Resend Email',
{:controller => 'account', :action => 'resend_confirm_email'},
{:method => :post} )
Lo que hace que el comportamiento de JavaScript sea apropiado en el enlace:
<a href="/account/resend_confirm_email"
onclick="var f = document.createElement('form');
f.style.display = 'none';
this.parentNode.appendChild(f);
f.method = 'POST';
f.action = this.href;
var s = document.createElement('input');
s.setAttribute('type', 'hidden');
s.setAttribute('name', 'authenticity_token');
s.setAttribute('value', 'EL9GYgLL6kdT/eIAzBritmB2OVZEXGRytPv3lcCdGhs=');
f.appendChild(s);
f.submit();
return false;">Resend Email</a>'
La acción de mi controlador está funcionando y está configurada para no representar nada:
respond_to do |format|
format.all { render :nothing => true, :status => 200 }
end
Pero cuando hago clic en el enlace, mi navegador descarga un archivo de texto vacío llamado "resend_confirm_email".
¿Lo que da?
ruby-on-rails
rest
link-to
user225643
fuente
fuente

Respuestas:
ACTUALIZACIÓN: Esta es una respuesta antigua para las versiones heredadas de Rails. Para Rails 4+, consulte la publicación de William Denniss a continuación.
Me parece que el tipo de contenido de la respuesta no es correcto o no se interpreta correctamente en su navegador. Verifique sus encabezados http para ver qué tipo de contenido es la respuesta.
Si se trata de cualquier otra cosa
text/html, puede intentar configurar manualmente el tipo de contenido de esta manera:fuente
Desde Rails 4,
headahora se prefiere arender :nothing. 1se prefiere sobre
Técnicamente son iguales. Si observa la respuesta para usar cURL, verá:
Sin embargo, llamar
headproporciona una alternativa más obvia a llamarrender :nothingporque ahora es explícito que solo está generando encabezados HTTP.fuente
head 200da como resultado una304respuesta para mí (en rieles 4.1.6). La consola muestra el código de estado 200, pero Chrome (panel de red) muestra 304. Elrender :nothing => trueenfoque funcionó.