Lassen Sie mich mit einem kurzen Überblick über link_to
Methode beginnen. Nach api, diese Methode einen Link-Tag der name
eine durch den Satz von options
erstellt URL angegeben erstellt:
link_to(name = nil, options = nil, html_options = nil, &block)
In Ihrem speziellen Fall ist die name
„in PayPal bezahlen“, das eine einfache Zeichenfolge . Der zweite Parameter, URL
, ist ein wenig komplizierter, da Sie nicht jede Art eines absoluten oder relativen Pfad zum Inhalt auf der Website übergeben, sondern statt dessen auf ein Objekt die Methode aufrufen:
@order.paypal_url(edit_order_url, payment_notification_url)
Was passiert hier ist diese bestimmte Methode paypal_url
wird sofort aufgerufen, und link_to
erwartet diese Methode, um eine korrekte URL
zurückzugeben. Das gleiche geschieht mit den bekannten Beispielen aus Dokumentation, z.B .:
link_to "Profile", profile_path(@profile)
# => <a href="/profiles/1">Profile</a>
Hier profile_path
ist ein Verfahren, das ein Argument akzeptiert zu bekommen seine einzigartige id
und damit einen richtigen Pfad erzeugen zu können. Es gilt die gleiche Regel: Diese Methode wird aufgerufen, sobald der Benutzer die Seite mit dem Link anfordert.
Also das erste Ding zu tun ist, alles zu entfernen, das mit Nachbearbeitung eines Klickens von paypal_url
Methode in Verbindung steht.
Aber Sie wollen diese Dinge funktionieren, nachdem ein Link geklickt wurde. Tatsächlich wird in einer Controller-Schicht eine Entscheidung darüber getroffen, ob ein Benutzer auf eine Verknüpfung geklickt hat oder nicht. Einfach gesagt: Wenn eine Controller-Aktion aufgerufen wird, wissen Sie, dass ein Benutzer auf einen Link geklickt hat.
Also Schritt zwei ist, eine Art von Anfrage an Ihre innere Controller-Aktion zu machen und die zugehörigen Logiken dort zu platzieren. Falls paypal_url
einen Benutzer zu Ihrer inneren Website-Seite führt, haben Sie wahrscheinlich diese Aktion bereits implementiert. Auf der anderen Seite, Ihre paypal_url
könnte zu äußeren Seite führen, wie tatsächliche Paypal-Verarbeitung ... In diesem Fall könnten Sie das Gleiche mit Umleitung oder Ajax-Anfrage erreichen.