Ruby / Ruby on Rails中是否有print_r或var_dump等价物?

我正在寻找一种方法来转储对象的结构,类似于PHP函数print_rvar_dump出于debugging的原因。

任何对象的.inspect方法应该格式正确显示,只是做..

 <%= theobject.inspect %> 

.methods方法也可以用于:

 <%= theobject.methods.inspect %> 

根据数据的不同,可能会将它放在<pre>标记中

在视图中:

 include DebugHelper ...your code... debug(object) 

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

 puts YAML::dump(object) 

资源

在视图中,您可以使用<%= debug(yourobject) %>来生成数据的YAML视图。 如果你想在你的日志中的东西,你应该使用logger.debug yourobject.inspect

你也可以在Rails控制台下使用YAML :: dump shorthand( 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 >> 

如果只想预览一些string内容,请尝试使用raise (例如在模型,控制器或其他不可访问的地方)。 你可以免费获得回溯:)

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

我也鼓励你尝试ruby-debug

这非常有帮助!

你可以使用puts some_variable.inspect 。 或者更短的版本: p some_variable 。 而为了更漂亮的输出,你可以使用awesome_print gem 。

如果您只想将相关数据显示到标准输出(如果从命令行运行,则输出terminal),则可以使用p some_object

先前的答案是好的,但如果你不想使用控制台(terminal),在Rails中,你可以使用debugging的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 

我用这个:)

 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 

最近我使用了awesome_printap方法,它可以在控制台和视图中工作。

如果您需要直观地扫描StringNumeric对象,那么特定于types的颜色输出真的会有所不同(尽pipe为了获得精美的外观,我不得不调整一下样式表)

最近我成了PRY的粉丝,我发现它非常适合做检查variables,debugging运行代码和检查外部代码。 作为这个具体问题的答案可能有点矫枉过正。