Je suis sur Rails 2.3.3 et je dois créer un lien qui envoie une demande de publication.
J'en 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>'
L'action de mon contrôleur fonctionne et est configurée pour ne rien rendre:
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 nommé «resend_confirm_email».
Ce qui donne?
ruby-on-rails
rest
link-to
user225643
la source
la source
Réponses:
MISE À JOUR: Ceci est une ancienne réponse pour les versions héritées de Rails. Pour Rails 4+, voir l'article de William Denniss ci-dessous.
Il me semble que le type de contenu de la réponse n'est pas correct ou n'est pas correctement interprété dans votre navigateur. Vérifiez à nouveau vos en-têtes http pour voir le type de contenu de la réponse.
Si c'est autre chose que
text/html
, vous pouvez essayer de définir manuellement le type de contenu comme ceci:la source
Depuis Rails 4,
head
est désormais préféré àrender :nothing
. 1est préféré à
Ils sont techniquement les mêmes. Si vous regardez la réponse pour l'un ou l'autre utilisant cURL, vous verrez:
Cependant, l'appel
head
offre une alternative plus évidente à l'appelrender :nothing
car il est maintenant explicite que vous ne générez que des en-têtes HTTP.la source
head 200
se traduit par une304
réponse pour moi (sur les rails 4.1.6). La console affiche le code d'état 200, mais Chrome (panneau réseau) affiche 304. L'render :nothing => true
approche a fonctionné.