Ich bin auf Rails 2.3.3 und muss einen Link erstellen, der eine Post-Anfrage sendet.
Ich habe eine, die so aussieht:
= link_to('Resend Email',
{:controller => 'account', :action => 'resend_confirm_email'},
{:method => :post} )
Welches macht das entsprechende JavaScript-Verhalten auf dem 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>'
Meine Controller-Aktion funktioniert und ist so eingestellt, dass nichts gerendert wird:
respond_to do |format|
format.all { render :nothing => true, :status => 200 }
end
Wenn ich jedoch auf den Link klicke, lädt mein Browser eine leere Textdatei mit dem Namen "resend_confirm_email" herunter.
Was gibt?
ruby-on-rails
rest
link-to
user225643
quelle
quelle
Antworten:
UPDATE: Dies ist eine alte Antwort für ältere Rails-Versionen. Für Rails 4+ siehe William Denniss 'Beitrag unten.
Klingt für mich so, als ob der Inhaltstyp der Antwort nicht korrekt ist oder in Ihrem Browser nicht richtig interpretiert wird. Überprüfen Sie Ihre http-Header, um festzustellen, welcher Inhaltstyp die Antwort ist.
Wenn dies nicht der Fall ist
text/html
, können Sie versuchen, den Inhaltstyp wie folgt manuell festzulegen:quelle
Da Rails 4
head
jetzt vorgezogen wirdrender :nothing
. 1wird gegenüber bevorzugt
Sie sind technisch gleich. Wenn Sie sich die Antwort für die Verwendung von cURL ansehen, sehen Sie:
Das Aufrufen
head
bietet jedoch eine offensichtlichere Alternative zum Aufrufen,render :nothing
da jetzt explizit angegeben wird, dass Sie nur HTTP-Header generieren.quelle
head 200
führt zu einer304
Antwort für mich (auf Schienen 4.1.6). Die Konsole zeigt 200 Statuscode an, aber Chrome (Netzwerkbedienfeld) zeigt 304. Derrender :nothing => true
Ansatz hat funktioniert.