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





Да. Самый простой способ - поднять значение в виде строки. Вот так: raise @foo.to_s
Или вы можете установить отладчик (gem install ruby-debug), а затем запустить сервер разработки с флагом --debugger. Затем в своем коде вызовите инструкцию debugger.
Внутри приглашения отладчика у вас есть много команд, в том числе p для печати значения переменной.
Обновлять: здесь еще немного о ruby-debug.
Если у вас есть переменная экземпляра контроллера с именем @foo, тогда в вашем контроллере вы можете просто сделать что-то вроде:
logger.debug "@foo is: #{@foo}"
Кроме того, вы можете вывести значение в шаблоне представления, используя:
<%= debug @foo %>
Я предпочитаю использовать такой метод проверки:
raise @foo.inspect
Он содержит больше информации, чем to_s, например значения атрибутов.
Резюме от Джорди Бунстера, Джона Топли и Джарила:
I. Быстрый и грязный способ:
raise @foo.inspect
в вашем контроллере. Или же
<% raise @foo.inspect %>
на ваш взгляд.
II. Правильный лог вам development.log:
logger.debug "@foo == #{@foo.inspect}"
III. Полноценная отладка:
Установите отладчик (gem install ruby-debug), а затем запустите сервер разработки с флагом --debugger. Затем в своем коде вызовите инструкцию debugger.
Внутри приглашения отладчика у вас есть много команд, в том числе p для печати значения переменной.
Создание исключения - самый быстрый способ, если вам просто нужно посмотреть значение, но стоит потратить время на то, чтобы научиться правильно использовать отладчик. Редко, когда вам нужно просто увидеть значение переменной, вы, вероятно, пытаетесь найти ошибку в своем коде, и для этого нужен отладчик.
Отправка информации в журнал разработки пока выполняется медленнее, чем любой из двух других вариантов, если вы научитесь использовать отладчик (который хочет читать файлы журнала). Используйте регистратор для производства, вы захотите увидеть, какое значение было, когда кто-то звонит вам и говорит, что все сломано.
Я обычно предпочитаю стандартный вывод ошибок
$ stderr.print ("что угодно")
Это просто и делает свою работу.
gem 'pry-moves'binding.pry в то место, где хотите остановитьсяЗатем продолжите, набрав c, перейдите к следующей строке с n или выполните другие действия по отладке, пока не решите проблему.