Как определить значение переменной контроллера во время выполнения в Ruby on Rails? - PullRequest
8 голосов
/ 13 сентября 2008

Как лучше всего определить значение переменной контроллера во время выполнения?

Например, есть ли способ вставить разрыв в код и заставить значение переменной выводиться на экран (или в журнал)?

Ответы [ 7 ]

11 голосов
/ 13 сентября 2008

Да. Самый простой способ - повысить значение в виде строки. Вот так: raise @foo.to_s

Или вы можете установить отладчик (gem install ruby-debug), а затем запустить сервер разработки с флагом --debugger. Затем в своем коде вызовите инструкцию debugger.

В приглашении отладчика у вас есть много команд, включая p для вывода значения переменной.

Обновление: вот немного больше о ruby-debug .

6 голосов
/ 13 сентября 2008

Если у вас есть переменная экземпляра контроллера с именем @foo, то в вашем контроллере вы можете просто сделать что-то вроде:

logger.debug "@foo is: #{@foo}"

Кроме того, вы можете вывести значение в шаблоне представления, используя:

<%= debug @foo %>
5 голосов
/ 13 сентября 2008

Я предпочитаю использовать метод проверки следующим образом:

raise @foo.inspect

Он содержит больше информации, чем to_s, например значения атрибутов.

3 голосов
/ 15 сентября 2008

Резюме от Джорди Бунстер, Джона Топли и Джарила:

I. Быстрый и грязный способ:

raise @foo.inspect

в вашем контроллере. Или

<% raise @foo.inspect %>

по вашему мнению.

II. Правильное ведение журнала вам development.log:

logger.debug "@foo == #{@foo.inspect}"

III. Полноценная отладка :

Установите отладчик (gem install ruby-debug), а затем запустите сервер разработки с флагом --debugger. Затем в своем коде вызовите инструкцию debugger.

Внутри подсказки отладчика у вас есть много команд, включая p для вывода значения переменной.

0 голосов
/ 01 мая 2018
  1. Добавить pry-move в Gemfile: gem 'pry-moves'
  2. Вставьте binding.pry там, где вы хотите остановиться
  3. Введите имя переменной, чтобы увидеть ее значение

Затем продолжите, набрав c, перейдите к следующей строке с n или выполните другие действия по отладке, пока не решите проблему.

0 голосов
/ 16 сентября 2008

Ну, я обычно предпочитаю стандартный вывод ошибок

$ stderr.print ( "все")

Это просто и делает работу.

0 голосов
/ 15 сентября 2008

Вызов исключения является самым быстрым способом, если вам просто нужно взглянуть на значение, но стоит потратить время на то, чтобы научиться правильно использовать отладчик. Редко, когда вам нужно просто увидеть значение переменной, вы, вероятно, пытаетесь найти ошибку в своем коде, и именно для этого и нужен отладчик.

Отправка информации в журнал разработки происходит медленнее, чем любой из двух других вариантов здесь, если вы научитесь использовать отладчик (который хочет читать файлы журнала). Используйте регистратор для производства, вы захотите узнать, какое значение имело, когда кто-то звонит вам и говорит, что все сломано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...