Ruby / Ruby on Rails中是否有print_r或var_dump等价物?
我正在寻找一种方法来转储对象的结构,类似于PHP函数print_r
和var_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 :
- http://railscasts.com/episodes/54-debugging-with-ruby-debug
- http://www.sitepoint.com/article/debug-rails-app-ruby-debug/
- http://www.datanoise.com/articles/2006/7/12/tutorial-on-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_print的ap
方法,它可以在控制台和视图中工作。
如果您需要直观地扫描String
或Numeric
对象,那么特定于types的颜色输出真的会有所不同(尽pipe为了获得精美的外观,我不得不调整一下样式表)
最近我成了PRY的粉丝,我发现它非常适合做检查variables,debugging运行代码和检查外部代码。 作为这个具体问题的答案可能有点矫枉过正。