Ich habe einen Link, mit dem ich eine Post-Anfrage senden muss. Normalerweise würde ich jQuery verwenden und das Standardverhalten des Links verhindern und dann ein Formular an das Ziel senden. Dies scheint etwas zu sein, bei dem Rails mir helfen sollte. Sicher genug, die link_to
Methode hat eine Option zum Angeben einer POST-http-Methode:
link_to "Profile", 'http://example.com/profile', method: :post
Das funktioniert, aber ich muss auch 2 Parameter hinzufügen. Ich habe es versucht:
link_to "Profile", 'http://example.com/profile', method: post, param1: 'value1', param2: 'value2'
Das hat diese Parameter nur zum <a>
HTML-Element hinzugefügt , diese aber beim Klicken auf den Link nicht übermittelt:
<a rel="nofollow" param1="value1" param2="value2" data-method="post" href="http://example.com/profile">Profile</a>
Gibt es eine Möglichkeit, eine POST-Anforderung mit Parametern mithilfe link_to
einer anderen Rails-Methode auszuführen? Ich benutze Rails 3.2.9.
Antworten:
Die kurze Antwort lautet: Wenn Sie unter "Parametern" Formularfelder verstehen, können Sie dies einfach nicht tun (zumindest nicht auf eine einfache Weise, die ich sehen kann). Sie sollten stattdessen ein Formular mit einer Senden-Schaltfläche verwenden, das so gestaltet ist, dass es wie ein Link aussieht (wenn Sie möchten, dass es so aussieht).
Wenn Sie andererseits Abfrageparameter gemeint hätten , würde dies funktionieren:
quelle
Sie können Parameter in der URL folgendermaßen codieren:
Wenn es nicht Ihren Anforderungen entspricht, verwenden Sie besser ein Formular als ein
link_to
.quelle
?
After-Profil.Beachten Sie, dass, wenn der Benutzer JS deaktiviert hat oder Sie die unauffälligen JS-Bibliotheken entfernt haben, die standardmäßig enthalten sind,
link_to
diese stillschweigend über eineGET
Anforderung gesendet werden .Im Allgemeinen mag ich keine Links, die
POST
Anfragen ausführen . Ich denke, das ist die Rolle eines Formulars und eines Knopfes.Eine einfache (und sicherere) Alternative ist daher die Verwendung des Rails button_to- Helfers:
button_to
unterstützt auch diemethod
Option, aber da sie standardmäßig verwendet wird,post
habe ich sie einfach weggelassen.quelle
Um Daten zu POSTEN, benötigen Sie ein Formular. Sie benötigen jedoch keine Schaltfläche zum Senden. Wenn Sie möchten, dass dies aus irgendeinem Grund wie ein Link aussieht, können Sie es tatsächlich zu einem Link machen, der das Formular über JavaScript sendet. Im folgenden Beispiel ist die POST-Ressource nur eine REST-Aktion, für die keine Felder erforderlich sind, sodass keine Steuerelemente für die Formulareingabe vorhanden sind. Wenn Sie einige Daten veröffentlichen möchten, fügen Sie einfach versteckte Eingabefelder in das Formular ein.
Dem Formular wird eine Klasse zugewiesen, damit Sie es über CSS formatieren oder ausblenden können (z. B. 'display: inline').
quelle
Die Parameter und die http-Methode sollten zusammen sein
{param1: 'value1', param2: 'value2', :method: :post}
quelle