ruby-on-rails - unprocessable_entity - ruby rails scope




Come ottengo l'attuale URL assoluto in Ruby on Rails? (20)

Come posso ottenere l'attuale URL assoluto nella mia vista Ruby on Rails?

request.request_uri restituisce solo l'URL relativo.


Per Rails 3.2 o Rails 4+

Dovresti utilizzare request.original_url per ottenere l'URL corrente.

Questo metodo è documentato al metodo original_url , ma se sei curioso, l'implementazione è:

def original_url
  base_url + original_fullpath
end

Per Rails 3:

Puoi scrivere "#{request.protocol}#{request.host_with_port}#{request.fullpath}" , poiché request.url è ora deprecato.

Per Rails 2:

Puoi scrivere request.url invece di request.request_uri . Questo combina il protocollo (di solito http: //) con l'host e request_uri per fornirti l'indirizzo completo.


È possibile aggiungere questo metodo current_url in ApplicationController per restituire l'URL corrente e consentire l'unione in altri parametri

# https://x.com/y/1?page=1 
# + current_url( :page => 3 )
# = https://x.com/y/1?page=3
def current_url(overwrite={})
    url_for :only_path => false, :params => params.merge(overwrite)
end

Esempio di utilizzo:

current_url --> http://...
current_url(:page=>4) --> http://...&page=4

Avevo bisogno URL dell'applicazione ma con la sottodirectory. Ero solito:

root_url(:only_path => false)

Funziona con Ruby on Rails 3.0 e dovrebbe essere supportato dalla maggior parte delle versioni di Ruby on Rails:

request.env['REQUEST_URI']

In Ruby on Rails 3.1.0.rc4:

 request.fullpath

Nessuno dei suggerimenti qui nel thread mi ha aiutato tristemente, tranne quello in cui qualcuno ha detto che ha usato il debugger per trovare quello che cercava.

Ho creato alcune pagine di errore personalizzate invece degli standard 404 e 500, ma request.url terminava in /404 invece del previsto /non-existing-mumbo-jumbo .

Quello che dovevo usare era

request.original_url

Penso che request.domain funzionerebbe, ma cosa succede se ti trovi in ​​una sottocartella come blah.blah.com? Qualcosa del genere potrebbe funzionare:

<%= request.env["HTTP_HOST"] + page = "/" + request.path_parameters['controller'] + "/" + request.path_parameters['action'] %>

Modifica i parametri in base alla struttura del tuo percorso.

Spero che sia d'aiuto!


Per Ruby on Rails 3:

request.url
request.host_with_port

Ho avviato una sessione di debugger e ho interrogato l'oggetto della richiesta:

request.public_methods

Per ottenere l'URL assoluto, il che significa che from the root può essere visualizzato in questo modo

<%= link_to 'Edit', edit_user_url(user) %>

L'helper users_url genera un URL che include il protocollo e il nome host. L'helper users_path genera solo la parte del percorso.

users_url: http://localhost/users
users_path: /users

Per ottenere l'URL della richiesta senza parametri di query.

def current_url_without_parameters
  request.base_url + request.path
end

Puoi impostare una variabile su URI.parse(current_url) , non vedo ancora questa proposta qui e funziona per me.


Puoi usare

request.original_url 

o

"#{request.protocol}#{request.host_with_port}" 

per ottenere l'URL corrente.


Puoi usare:

request.full_path

o

request.url

Spero che risolva il tuo problema.

Saluti


Se per parentela, intendi solo senza il dominio, quindi controlla request.domain .


Sembra che request_uri sia deprecato in Ruby on Rails 3.

Using #request_uri is deprecated. Use fullpath instead.

Utilizzo di Ruby 1.9.3-p194 e Ruby on Rails 3.2.6:

Se request.fullpath non funziona, prova request.env ["HTTP_REFERER"]

Ecco la mia storia qui sotto.

Ho riscontrato un problema analogo con il rilevamento dell'URL corrente (mostrato nella barra degli indirizzi dell'utente nel suo browser) per le pagine cumulative che combinano le informazioni provenienti da diversi controller, ad esempio http://localhost:3002/users/1/history/issues .

L'utente può passare a diversi elenchi di tipi di problemi. Tutti questi elenchi vengono caricati tramite Ajax da diversi controller / parziali (senza ricaricare).

Il problema era impostare il percorso corretto per il pulsante Indietro in ciascun elemento dell'elenco, in modo che il pulsante Indietro potesse funzionare correttamente sia nella sua pagina che nella cronologia delle pagine cumulative.

Nel caso in cui io usi request.fullpath , restituisce il percorso dell'ultima richiesta JavaScript che non è sicuramente l'URL che sto cercando.

Così ho usato request.env ["HTTP_REFERER"] che memorizza l'URL dell'ultima richiesta ricaricata.

Ecco un estratto dal parziale per prendere una decisione

- if request.env["HTTP_REFERER"].to_s.scan("history").length > 0
  - back_url = user_history_issue_path(@user, list: "needed_type")
- else
  - back_url = user_needed_type_issue_path(@user)
- remote ||= false
=link_to t("static.back"), back_url, :remote => remote

se vuoi essere specifico, nel senso, conosci il percorso che ti serve:

link_to current_path(@resource, :only_path => false), current_path(@resource)

Per Rails 3.2 o Rails 4 Semplicemente ottenere in questo modo "request.original_url" Riferimento: Metodo URL originale

Per Rails 3 As request.url è deprecato. Possiamo ottenere il percorso assoluto concatenando

"#{request.protocol}#{request.host_with_port}#{request.fullpath}"

Per Rails 2

request.url

 url_for(params)

E puoi aggiungere facilmente qualche nuovo parametro:

url_for(params.merge(:tag => "lol"))

(url_for(:only_path => false) == "/" )? root_url : url_for(:only_path => false)




url