Come determinare il valore di una variabile del controller durante l'esecuzione in Ruby on Rails?
-
09-06-2019 - |
Domanda
Qual è il modo migliore per determinare il valore di una variabile del controller durante l'esecuzione?
Ad esempio, esiste un modo per inserire un'interruzione nel codice e far sì che il valore della variabile venga visualizzato sullo schermo (o nel registro)?
Soluzione
SÌ.Il modo più semplice è aumentare il valore come stringa.Così: raise @foo.to_s
In alternativa, puoi installare il debugger (gem install ruby-debug
), quindi avviare il server di sviluppo con il file --debugger
bandiera.Quindi, nel tuo codice, chiama the debugger
istruzione.
All'interno del prompt del debugger sono presenti molti comandi, inclusi p
per stampare il valore di una variabile.
Aggiornamento: ecco qualcosa in più sul debug di Ruby.
Altri suggerimenti
Se hai una variabile di istanza del controller denominata @foo
, quindi nel tuo controller puoi semplicemente fare qualcosa come:
logger.debug "@foo is: #{@foo}"
Inoltre, puoi generare il valore nel modello di visualizzazione utilizzando:
<%= debug @foo %>
Preferisco utilizzare il metodo di ispezione in questo modo:
raise @foo.inspect
Ha più informazioni di to_s, come i valori degli attributi.
Riepilogo di Jordi Bunster, John Topley e Jaryl:
IO.Modo rapido e sporco:
raise @foo.inspect
nel tuo controller.O
<% raise @foo.inspect %>
a tuo avviso.
II.Registrazione corretta per te development.log
:
logger.debug "@foo == #{@foo.inspect}"
III. Debug completo:
Installa il debugger (gem install ruby-debug
), quindi avviare il server di sviluppo con il file --debugger
bandiera.Quindi, nel tuo codice, chiama the debugger
istruzione.
All'interno del prompt del debugger sono presenti molti comandi, inclusi p
per stampare il valore di una variabile.
Sollevare un'eccezione è il modo più veloce se hai solo bisogno di guardare un valore, ma vale la pena dedicare del tempo a imparare come utilizzare correttamente il debugger.È raro che tu abbia bisogno solo di vedere il valore di una variabile, probabilmente stai cercando di trovare un bug nel tuo codice, ed è a questo che serve un debugger.
L'invio delle informazioni al registro di sviluppo è più lento rispetto a una delle altre due opzioni qui finora se impari a utilizzare il debugger (chi vuole leggere i file di registro).Usa il logger per la produzione, vorrai vedere qual era il valore quando qualcuno ti chiama e dice che è tutto rotto.
Bene, di solito preferisco l'output dell'errore standard
$stderr.print("qualunque cosa")
È semplice e fa il suo lavoro.
- Aggiungere fare leva a Gemfile:
gem 'pry-moves'
- Inserire
binding.pry
dove vuoi fermarti - Digita il nome della variabile per visualizzarne il valore
Quindi continuare digitando c
, passa alla riga successiva con n
oppure esegui altre azioni di debug finché non risolvi il problema.