Как определить значение переменной контроллера во время выполнения в Ruby on Rails?

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

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

7 ответов


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

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

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

обновление: здесь немного больше о ruby-debug.


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

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

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

<%= debug @foo %>

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

raise @foo.inspect

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


резюме от Bunster Жорди, Джон топлы, и Jaryl:

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

raise @foo.inspect

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

<% raise @foo.inspect %>

на ваш взгляд.

II. Правильный вход к вам development.log:

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

раздел III. полноценная отладка:

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

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


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

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


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

$поток stderr.print ("whatever")

его просто и делает свою работу.


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

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