web-dev-qa-db-fra.com

"render: nothing => true" renvoie un fichier texte vide?

Je suis sur Rails 2.3.3, et je dois créer un lien qui envoie une demande de publication.

J'ai un qui ressemble à ceci:

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

Ce qui rend le comportement JavaScript approprié sur le lien:

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

Mon action de contrôleur fonctionne et ne génère rien:

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

Mais lorsque je clique sur le lien, mon navigateur télécharge un fichier texte vide intitulé "resend_confirm_email".

Ce qui donne?

112
user225643

PDATE: Ceci est une ancienne réponse pour les versions antérieures Rails versions. Pour Rails 4+, voir l'article de William Denniss ci-dessous.).

Cela me semble que le type de contenu de la réponse n'est pas correct ou n'est pas interprété correctement dans votre navigateur. Vérifiez vos en-têtes http pour voir quel type de contenu est la réponse.

Si c'est autre chose que text/html, vous pouvez essayer de définir manuellement le type de contenu comme suit:

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

Depuis Rails 4, head est maintenant préféré à render :nothing.1

head :ok, content_type: "text/html"

# or (equivalent)

head 200, content_type: "text/html"

est préférable à

render nothing: true, status: :ok, content_type: "text/html"

# or (equivalent)

render nothing: true, status: 200, content_type: "text/html"

Ils sont techniquement les mêmes. Si vous examinez la réponse à l’utilisation de cURL, vous verrez:

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

Cependant, appeler head fournit une alternative plus évidente que d’appeler render :nothing _ car il est maintenant explicite de ne générer que des en-têtes HTTP.


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