ruby on rails - examples - "Render: nothing=> true" devuelve un archivo de texto sin formato vacĂo?
ruby on rails ajax example (2)
Estoy en Rails 2.3.3 y necesito hacer un enlace que envíe una solicitud posterior.
Tengo uno que se ve así:
=link_to( ''Resend Email'', {:controller => ''account'', :action => ''resend_confirm_email'' }, {:method => :post} )
Lo que hace que el comportamiento de JavaScript 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>''
Mi acción de controlador está funcionando, y configurado para no mostrar 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?
Desde Rails 4, ahora se prefiere la head
sobre el render :nothing
. 1
head :ok, content_type: "text/html"
# or (equivalent)
head 200, content_type: "text/html"
es preferido sobre
render nothing: true, status: :ok, content_type: "text/html"
# or (equivalent)
render nothing: true, status: 200, content_type: "text/html"
Técnicamente son lo mismo. Si miras la respuesta para usar cURL, verás:
HTTP/1.1 200 OK
Connection: close
Date: Wed, 1 Oct 2014 05:25:00 GMT
Transfer-Encoding: chunked
Content-Type: text/html; charset=utf-8
X-Runtime: 0.014297
Set-Cookie: _blog_session=...snip...; path=/; HttpOnly
Cache-Control: no-cache
Sin embargo, el head
llamada proporciona una alternativa más obvia que invocar el render :nothing
porque ahora es explícito que solo está generando encabezados HTTP.
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. Comprueba dos veces tus encabezados http para ver qué tipo de contenido es la respuesta.
Si es algo más que text/html
, puede intentar configurar manualmente el tipo de contenido de esta manera:
render :nothing => true, :status => 200, :content_type => ''text/html''