2015-01-27 2 views
0

В php можно печатать_r() в любом месте в представлении, контроллере или модели. Есть ли что-то подобное в рельсах? Я попытался проверить и проверить. Кажется, они не печатают вещи из модели. Разрешено ли это использовать? Если не какой-либо пример модели или контроллера?функции печати и отладки в рельсах?

+0

'to_yaml' и' inspect' фактически просто возвращают строку, представляющую данный объект. Вопрос заключается в том, что вы отправляете эту строку в любом месте, что вызывает ее вывод (на консоль или веб-страницу) в качестве побочного эффекта (в последнее время было слишком много функциональных программ, извините за возможную путаницу). –

+0

Лучший вопрос, который я должен был задать, - это функция, позволяющая мне распечатать содержимое объекта в модели и отобразить его в представлении, а не в консоли. – Brian

+0

И ответы на этот вопрос даны ниже, и в двух словах они говорят * вы не можете * или * не делать этого *. Предположим, вы писали новый уровень просмотров, например, в JSON, в качестве API вашего приложения. Нет никакого идиоматического способа бросить кучу произвольных данных в объект JSON. Поскольку нет общего способа сделать это безопасно, это не было реализовано. –

ответ

0

Короткий ответ, вы не можете. По крайней мере, не в одной строке. И не только потому, что это нарушение MVC, но и практические причины, которые мешают этому.

Не существует надежного способа вывода кучи данных в произвольном формате и сохранения его достоверности. Вывод его в виде JSON может легко привести к недействительным данным. Поэтому, если ваши данные отладки могут обрабатываться только браузером, этот вывод должен указываться только в представлениях для браузеров. Даже если никто другой не существует, separate concerns.

Существует, конечно же, замена. Rails 4.2.0 отправляет шаблон приложения с web_console. Все, что вам нужно для начала использования, это добавить вызов в console в ваши представления где-нибудь, например, в общий файл макета приложения. Если это на самом деле Еврорадио, добавьте эту строку ниже:

<%= console %> 

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

Существует также множество способов вывода данных в консоль сервера или файл журнала. Они перечислены в других ответах. Я немного добавлю к решению, связанному с регистратором.

Rails Panel. Это расширение Chrome, которое добавляет еще одну вкладку в инструменты Chrome Dev (которые отображаются позади F12) с именем «Rails».Чтобы он работал, вам нужно добавить жкем meta_request в ваше приложение (убедитесь, что оно находится в группе development!). После того, как работает, он будет показывать нагрузки данных о том, как была обработана страница:

  • Время, затраченное на выборку данных, что делает его
  • параметров для данного запроса
  • Выполненная DB запросы, продолжительность и линии у них был вызван
  • Просмотр файлов участвует
  • записей журнала, испускаемые на эту просьбу и что вызвало, что
  • Ошибки встречаются

Эта одна и некоторые другие отладочные вещи обсуждаются в this Railscast.

2

Это действительно не существует, потому что это не эффективный способ отладки.

Возможность вывода вывода в браузер зависит от того, где вы находитесь. Это тривиально легко выглядит, немного громоздко в контроллерах, и слишком сложно быть достойным от моделей.

К счастью, есть много лучшие инструменты, чем просто сброс вещей в браузер.

Вы можете использовать pry, чтобы остановить средний запрос, открыть среду REPL и интерактивно запросить или изменить состояние запущенного приложения.

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

Rails.logger.info(my_object.inspect) 
+0

Чтобы добавить стек с 'pry', я рекомендую' pry-rails' (заменяет IRB в 'rails console'), [' pry-byebug'] (https://github.com/deivid-rodriguez/pry-byebug) ([byebug'] (https://github.com/deivid-rodriguez/byebug) для отладки, Ruby 2.0+) и 'pry-coolline' (подсветка основного синтаксиса в REPL). –

1

Обычно вы будете идентифицировать проблемы в вашей модели, контроллера или интеграционных тестов задолго до того, становится проблемой. В этом контексте можно использовать puts для вывода, что вы хотите, когда инструментирование бит кода, и он будет отображаться в тестовом выходе:

puts object.inspect 

в пределах Rails операционной среды можно использовать Rails.logger:

Rails.logger.debug(object.inspect) 

Это будет отображаться в log/development.org, где вы можете увидеть, что происходит. Лучше оставить это на уровне debug, чтобы он не загромождал ваши журналы производства, если оставить их случайно.

Смежные вопросы