Basis-URL im Controller erkennen? [geschlossen]
Wie können wir die Root- / Basis-URL im Controller erkennen?
Ich führe eine Funktion aus, die wissen muss, wohin der Benutzer nach Abschluss zurückkehren soll, und ich möchte, dass sie in dev und prod funktioniert. Wenn ich derzeit nur den Domainnamen verwende, kehrt der Benutzer in der Entwicklung zur eigentlichen Website zurück (z. B. www.example.com/reauth anstelle von http: // localhost: 3000), was nicht wünschenswert ist (in dev sollte der Benutzer an dev zurückgegeben werden; sie sollten nicht mit der Produktversion der Site verknüpft sein).
Ich möchte also Code, der Folgendes zurückgibt:
https://www.example.comin der Produktion undhttp://localhost:3000in Entwicklung
Beispiel
Hier ist eine vereinfachte Version des genauen Beispiels, für refresh_urldas der Wert festgelegt werden soll:
https://www.example.com/reauthin der Produktion und,localhost:3000/reauthin Entwicklung
Beachten Sie, dass der letzte Teil der URL derselbe ist, der erste Teil (Basis-URL) jedoch die eigentliche Domäne in der Produktion und localhost in der Entwicklung ist.
Stripe::AccountLink.create({
refresh_url: 'https://www.example.com/reauth'
})
Was ich bisher weiß
Ich habe angeschaut:
- wie man die Basis-URL im Modell (und in der Ansicht ) erkennt , sowie
- wie man die Basis-URL erhält (die zurückgibt
NameError: undefined local variable or method 'request' for main:Object)
Antworten
Ich habe herausgefunden, dass die Methode hier funktioniert.
dh
request.base_url
Anmerkungen:
- Dadurch wird die URL ohne einen abschließenden Schrägstrich zurückgegeben.
- Dies funktioniert nicht in der Rails-Konsole
Zum späteren Nachschlagen hat sich für mich Folgendes gelöst, um die richtige Basis-URL anzugeben, je nachdem, ob die App in dev oder prod ausgeführt wird:
base_url = (!Rails.const_defined? 'Console') ? (request.base_url) : "http://localhost:3000"