Como determinar o valor de uma variável de controlador durante a execução em Ruby on Rails?

StackOverflow https://stackoverflow.com/questions/60720

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)?

Foi útil?

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.

  1. Adicionar movimentos de alavanca para Gemfile: gem 'pry-moves'
  2. Inserir binding.pry onde você quer parar
  3. 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top