Como determinar o valor de uma variável de controlador durante a execução em Ruby on Rails?
-
09-06-2019 - |
Pergunta
Qual é a melhor maneira de determinar o valor de uma variável do controlador durante a execução?
Por exemplo, existe uma maneira de inserir uma quebra no código e fazer com que o valor da variável seja exibido na tela (ou no log)?
Solução
Sim.A maneira mais fácil é aumentar o valor como uma string.Igual a: raise @foo.to_s
Ou você pode instalar o depurador (gem install ruby-debug
) e, em seguida, inicie o servidor de desenvolvimento com o --debugger
bandeira.Então, no seu código, chame o debugger
instrução.
Dentro do prompt do depurador, você tem muitos comandos, incluindo p
para imprimir o valor de uma variável.
Atualizar: aqui está um pouco mais sobre ruby-debug.
Outras dicas
Se você tiver uma variável de instância do controlador chamada @foo
, então no seu controlador você pode simplesmente fazer algo como:
logger.debug "@foo is: #{@foo}"
Além disso, você pode gerar o valor em seu modelo de visualização usando:
<%= debug @foo %>
Eu prefiro usar o método inspecionar assim:
raise @foo.inspect
Possui mais informações que to_s, como os valores dos atributos.
Resumo de Jordi Bunster, John Topley e Jaryl:
EU.Maneira rápida e suja:
raise @foo.inspect
em seu controlador.Ou
<% raise @foo.inspect %>
na sua opinião.
II.Registro adequado para você development.log
:
logger.debug "@foo == #{@foo.inspect}"
III. Depuração completa:
Instale o depurador (gem install ruby-debug
) e, em seguida, inicie o servidor de desenvolvimento com o --debugger
bandeira.Então, no seu código, chame o debugger
instrução.
Dentro do prompt do depurador, você tem muitos comandos, incluindo p
para imprimir o valor de uma variável.
Criar uma exceção é a maneira mais rápida se você precisar apenas observar um valor, mas vale a pena aprender como usar o depurador corretamente.É raro que você precise apenas ver o valor de uma variável, provavelmente você está tentando encontrar um bug em seu código, e é para isso que serve um depurador.
Enviar as informações para o log de desenvolvimento é mais lento do que qualquer uma das outras duas opções aqui até agora, se você aprender como usar o depurador (que deseja ler os arquivos de log).Use o logger para produção, você vai querer ver qual foi o valor quando alguém te ligar e dizer que está tudo quebrado.
Bem, eu geralmente prefiro a saída de erro padrão
$stderr.print("tanto faz")
É simples e faz o trabalho.
- Adicionar movimentos de alavanca para Gemfile:
gem 'pry-moves'
- Inserir
binding.pry
onde você quer parar - Digite o nome da variável para ver seu valor
Depois continue digitando c
, vá para a próxima linha com n
ou execute outras ações de depuração até resolver o problema.