“render :nothing => true” geeft een leeg tekstbestand terug?

Ik ben op Rails 2.3.3 en ik moet een link maken die een postverzoek verzendt.

Ik heb er een die er zo uitziet:

= link_to('Resend Email', 
  {:controller => 'account', :action => 'resend_confirm_email'}, 
  {:method => :post} )

Dat zorgt voor het juiste JavaScript-gedrag op de link:

<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>'

Mijn controlleractie werkt en ingesteld om niets weer te geven:

respond_to do |format|
  format.all { render :nothing => true, :status => 200 }
end

Maar als ik op de link klik, downloadt mijn browser een leeg tekstbestand met de naam “resend_confirm_email.”

Wat geeft?


Antwoord 1, autoriteit 100%

Sinds Rails 4 heeft headnu de voorkeur boven render :nothing.1

head :ok, content_type: "text/html"
# or (equivalent)
head 200, content_type: "text/html"

heeft de voorkeur boven

render nothing: true, status: :ok, content_type: "text/html"
# or (equivalent)
render nothing: true, status: 200, content_type: "text/html"

Ze zijn technisch hetzelfde. Als je naar het antwoord kijkt voor het gebruik van cURL, zie je:

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

Het aanroepen van headbiedt echter een meer voor de hand liggend alternatief voor het aanroepen van render :nothingomdat het nu expliciet is dat u alleen HTTP-headers genereert.


  1. http://guides.rubyonrails.org/layouts_and_rendering.html #using-head-to-build-header-only-responses

Antwoord 2, autoriteit 53%

UPDATE: dit is een oud antwoord voor oudere Rails-versies. Voor Rails 4+, zie het bericht van William Denniss hieronder.

Het lijkt mij alsof het inhoudstype van het antwoord niet correct is, of niet correct wordt geïnterpreteerd in uw browser. Controleer nogmaals je http-headers om te zien welk inhoudstype het antwoord is.

Als het iets anders is dan text/html, kun je proberen het inhoudstype als volgt handmatig in te stellen:

render :nothing => true, :status => 200, :content_type => 'text/html'

Other episodes