Rileva l'URL di base nel controller? [chiuso]

Oct 12 2020

Come possiamo rilevare l'URL radice / base nel controller?

Sto eseguendo una funzione che deve sapere dove restituire l'utente al termine e vorrei che funzionasse in dev e prod. Al momento, se utilizzo semplicemente il nome di dominio, in fase di sviluppo restituisce l'utente al sito Web effettivo (ad es. Www.example.com/reauth , anziché http: // localhost: 3000), il che non è desiderabile (in dev , l'utente dovrebbe essere restituito a dev; non dovrebbero essere collegati alla versione prod del sito).

Quindi voglio un codice che restituisca:

  • https://www.example.com in produzione e
  • http://localhost:3000 in via di sviluppo

Esempio

Ecco una versione semplificata dell'esempio esatto di cui ho bisogno per refresh_urlimpostare il valore su :

  • https://www.example.com/reauth in produzione e,
  • localhost:3000/reauth in via di sviluppo

Nota la cosa fondamentale qui è che l'ultima parte dell'URL è la stessa, ma la prima parte (URL di base) è il dominio effettivo in produzione e localhost in sviluppo.

Stripe::AccountLink.create({
    refresh_url: 'https://www.example.com/reauth'
  })

Quello che so finora

Ho guardato:

  • come rilevare l'URL di base nel modello (e nella vista ), nonché
  • come ottenere l'URL di base (che restituisce NameError: undefined local variable or method 'request' for main:Object)

Risposte

stevec Oct 12 2020 at 18:25

Ho scoperto che il metodo qui funziona.

cioè

request.base_url

Appunti:

  • questo restituirà l'URL senza una barra in avanti finale.
  • questo non funzionerà nella console di rails

Per riferimento futuro, ecco cosa ha risolto per me fornire l'URL di base corretto a seconda che l'app venga eseguita in dev o prod:

base_url = (!Rails.const_defined? 'Console') ? (request.base_url) : "http://localhost:3000"