在php中,可以在视图,控制器或模型中的任何位置使用print_r()。在rails中有类似的东西吗?我试着去查看并检查。它们似乎不会从模型中打印出来。是否只允许在视野中使用?如果没有模型或控制器中的任何示例?
答案 0 :(得分:2)
这并不存在,因为它是最有效的调试方式。
能够将输出转储到浏览器取决于您所处的位置。它在视图中非常简单,在控制器中稍微有点麻烦,而且从模型中来说太难以值得。
幸运的是,除了简单地将内容转储到浏览器中之外,还有很多更好的工具。
您可以使用pry停止请求中途,打开REPL环境并以交互方式查询或修改正在运行的应用程序的状态。
如果您只想跟踪输出的执行流程,请使用记录器:
Rails.logger.info(my_object.inspect)
答案 1 :(得分:1)
通常,您会在模型,控制器或集成测试成为问题之前发现问题。在这种情况下,您可以使用puts
输出您想要的任何代码,并且它将显示在您的测试输出中:
puts object.inspect
在Rails操作环境中,您可以使用Rails.logger
:
Rails.logger.debug(object.inspect)
这将显示在log/development.org
,您可以在其中查看正在发生的事情。最好将其保留在debug
级别,这样如果意外丢失,它不会使生产日志混乱。
答案 2 :(得分:0)
简短的回答是,你不能。至少不在一条线上。而且不仅因为这违反了MVC,还有一些阻止这种情况的实际原因。
没有可靠的方法以任意格式输出一堆数据并使其保持有效。在JSON视图中输出它可能很容易导致无效数据。因此,如果您的调试数据只能由浏览器处理,那么只应在浏览器的视图中指定该输出。即使没有其他存在,separate concerns。
当然有替代品。 Rails 4.2.0附带web_console
的应用模板。您开始使用它所需要的只是在某个地方的视图中添加对console
的调用,例如应用程序的常规布局文件。如果这实际上是ERB,请在下面添加以下行:
<%= console %>
无论出现在何处,您都可以在当前渲染视图的上下文中使用REPL,您可以在其中轻松检查对象甚至执行更改数据的操作。
还有多种方法可以将数据输出到服务器的控制台或日志文件中。他们已被列入其他答案。我将在涉及记录器的解决方案中添加一些内容。
Rails Panel。这是Chrome扩展程序,为Chrome开发工具(显示在F12后面)添加了另一个标签,名为“Rails”。要使其正常工作,您需要在应用中添加meta_request
gem(确保它在组development
中!)。一旦工作,它将显示有关页面处理方式的大量数据:
this Railscast中讨论了这个和其他一些调试事项。