在Ruby / Ruby on Rails中是否有等效的print_r或var_dump?


Answers:


133

.inspect任何对象的方法都应正确格式化才能显示,只要这样做即可。

<%= theobject.inspect %>

.methods方法也可能有用:

<%= theobject.methods.inspect %>

<pre>根据数据的不同,将其放入标签中可能会有所帮助


2
对于那些在控制台中寻找整洁格式的人来说,只是一个时间节省者:puts theobject.inspect.gsub(",", "\n")
Gus 2015年

65

在视图中:

include DebugHelper

...your code...

debug(object)

在控制器,模型和其他代码中:

puts YAML::dump(object)

资源


DebugHelper的debug(object)引发未定义的方法DebugHelper's :)
Arnold Roa

8

在视图中,您可以使用<%= debug(yourobject) %>它将生成数据的YAML视图。如果您希望在日志中添加某些内容,则应使用logger.debug yourobject.inspect


6

您还可以在Rails控制台下使用YAML :: dump速记(y):

>> y User.first
--- !ruby/object:User 
attributes: 
  created_at: 2009-05-24 20:16:11.099441
  updated_at: 2009-05-26 22:46:29.501245
  current_login_ip: 127.0.0.1
  id: "1"
  current_login_at: 2009-05-24 20:20:46.627254
  login_count: "1"
  last_login_ip: 
  last_login_at: 
  login: admin
attributes_cache: {}

=> nil
>> 

如果只想预览一些字符串内容,请尝试使用抬高(例如在模型,控制器或其他无法访问的地方)。您可以免费获得回溯:)

>> raise Rails.root
RuntimeError: /home/marcin/work/github/project1
    from (irb):17
>> 

我也非常鼓励您尝试ruby-debug

非常有用!


6

您可以使用puts some_variable.inspect。或更短的版本:p some_variable。对于更漂亮的输出,您可以使用awesome_print gem


3

如果只希望将相关数据显示到stdout(如果从命令行运行则为终端输出),则可以使用p some_object


3

先前的答案很好,但是如果您不想使用控制台(终端),则可以在Rails中使用调试的Helper ActionView :: Helpers :: DebugHelper在视图中打印结果

#app/view/controllers/post_controller.rb
def index
 @posts = Post.all
end

#app/view/posts/index.html.erb
<%= debug(@posts) %>

#start your server
rails -s

结果(在浏览器中)

- !ruby/object:Post
  raw_attributes:
    id: 2
    title: My Second Post
    body: Welcome!  This is another example post
    published_at: '2015-10-19 23:00:43.469520'
    created_at: '2015-10-20 00:00:43.470739'
    updated_at: '2015-10-20 00:00:43.470739'
  attributes: !ruby/object:ActiveRecord::AttributeSet
    attributes: !ruby/object:ActiveRecord::LazyAttributeHash
      types: &5
        id: &2 !ruby/object:ActiveRecord::Type::Integer
          precision: 
          scale: 
          limit: 
          range: !ruby/range
            begin: -2147483648
            end: 2147483648
            excl: true
        title: &3 !ruby/object:ActiveRecord::Type::String
          precision: 
          scale: 
          limit: 
        body: &4 !ruby/object:ActiveRecord::Type::Text
          precision: 
          scale: 
          limit: 
        published_at: !ruby/object:ActiveRecord::AttributeMethods::TimeZoneConversion::TimeZoneConverter
          subtype: &1 !ruby/object:ActiveRecord::Type::DateTime
            precision: 
            scale: 
            limit: 
        created_at: !ruby/object:ActiveRecord::AttributeMethods::TimeZoneConversion::TimeZoneConverter
          subtype: *1
        updated_at: !ruby/object:ActiveRecord::AttributeMethods::TimeZoneConversion::TimeZoneConverter
          subtype: *1

0

我用这个:)

require 'yaml'

module AppHelpers
  module Debug
    module VarDump

      class << self

        def dump(dump_object, file_path)
          File.open file_path, "a+" do |log_file|
            current_date = Time.new.to_s + "\n" + YAML::dump(dump_object) + "\n"
            log_file.puts current_date
            log_file.close
          end
        end

      end

    end
  end
end

0

最近,我正在使用awesome_printap方法,该方法可在控制台以及视图中使用。

该型专用彩色输出,真的有差别,如果你需要在视觉上扫描StringNumeric对象(虽然我不得不调整我的样式表一点点,以获得优美的外观)


0

最近,我成为PRY的粉丝,我发现它在执行诸如检查变量,调试运行代码和检查外部代码之类的事情上令人难以置信。作为对这个特定问题的答案,可能有点过大了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.