如何查看会话数据对象的可读版本

时间:2017-06-12 00:01:26

标签: ruby-on-rails ruby

我正在尝试从会话数据对象中获取域名,但该对象非常庞大而且非常密集。

数据样本

#<ActionDispatch::Request::Session::Options:0x007f982c42b988 @by=#
<ActionDispatch::Session::CookieStore:0x007f982e03d798 @app=#
<ActionDispatch::Flash:0x007f982e03d7e8 @app=#
<ActionDispatch::ParamsParser:0x007f982e03d9a0 @app=#
<Rack::Head:0x007f982e03d9f0 @app=#<Rack::ConditionalGet:0x007f982e03da40 
@app=#<Rack::ETag:0x007f982e03da68 @app=#<OmniAuth::Builder:0x007f982e03e4b8 
@options=nil, @warmup=nil, @run=#
<ActionDispatch::Routing::RouteSet:0x007f982c4325f8>, @map=nil, @use=[#
<Proc:0x007f982e03db30@/REMOVED/.rvm/gems/ruby-2.3.1/gems/rack-
1.6.6/lib/rack/builder.rb:86>]>, @cache_control="max-age=0, private, must-
revalidate", @no_cache_control="no-cache">>>, @parsers={#
<Mime::Type:0x007f982dae3270 @synonyms=["text/x-json", 
"application/jsonrequest"], @symbol=:json, @string="application/json", 
@hash=-2179284299704414862>=>:json}>>, @default_options={:path=>"/", 
:domain=>nil, :expire_after=>nil, :secure=>false, :httponly=>true, 
:defer=>false, :renew=>false}, @key="_faq-app_session", @cookie_only=true>, 
@env={"SERVER_SOFTWARE"=>"thin 1.7.0 codename Dunder Mifflin", 

对于几个页面来说,它会继续下去

1 个答案:

答案 0 :(得分:0)

查看任意对象的结构不是OOP原则所鼓励的东西:对象隐藏了在它们之外应该是无关紧要的东西。此外,可能存在比一次读取所有数据更多的数据。要探索随机对象,最好的方法可能是pry gem,它允许您在控制台中检查对象。如果确实需要,可以轻松地创建一个函数来递归所有对象的instance_variables并打印出来。

但是,这里可能不需要通用方法。这似乎是一个ActionDispatch::Request::Session::Options对象。它有一个#to_hash方法,并且哈希值可以打印出来:

require 'json'
puts JSON.pretty_generate(session_options.to_hash)

或者如果您不需要标准格式,

require 'pp'
pp session_options.to_hash