-1

在 byebug 的 rails 中,如何将会话变量的输出视为字符串,只显示其中的一部分?

我可以从控制台查看会话变量的输出,但它真的很长。如果我可以把它放在一个字符串中并执行例如 thestr[1,100] 。那么就可以了。但我看不出如何将它变成一个字符串。

~/rubymac/cookiesandsessions/sessiontest1$ rails s
=> Booting Puma
=> Rails 5.2.3 application starting in development 
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.12.1 (ruby 2.5.0-p0), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://localhost:3000
Use Ctrl-C to stop
Started GET "/" for 127.0.0.1 at 2019-04-24 15:34:03 +0100
Processing by ApplicationController#index as HTML
Return value is: nil

[1, 5] in /Users/apple/rubymac/cookiesandsessions/sessiontest1/app/controllers/application_controller.rb
   1: class ApplicationController < ActionController::Base
   2:  def index
   3:    byebug 
=> 4:  end
   5: end

如您所见,会话的响应非常长。而且我看不到如何仅显示前 100 个字符。例如 thestr[0,100]

(byebug) 会话

@app=#>, @cache_control="max-age=0, private, must-revalidate", @no_cache_control="no-cache">>>>, @default_options={:path=>"/", :domain =>nil, :expire_after=>nil, :secure=>false, :httponly=>true, :defer=>false, :renew=>false}, @key="_sessiontest1_session", @cookie_only=true>, @req =#[1, 3], "rack.errors"=>#>, "rack.multithread"=>true, "rack.multiprocess"=>false, "rack.run_once"=>false, "SCRIPT_NAME"=> "", "QUERY_STRING"=>"", "SERVER_PROTOCOL"=>"HTTP/1.1", "SERVER_SOFTWARE"=>"puma 3.12.1 穿着睡衣的骆驼", "GATEWAY_INTERFACE"=>"CGI/1.2", "REQUEST_METHOD "=>"获取","REQUEST_PATH"=>"/", "REQUEST_URI"=>"/", "HTTP_VERSION"=>"HTTP/1.1", "HTTP_HO .......... ……

我尝试了 session.to_s 但这使得这个字符串不只是将上面的输出转换为字符串。

(byebug) session.to_s
"#<ActionDispatch::Request::Session:0x00007fa60ee91270>"
(byebug) 
4

2 回答 2

4

您可以使用session.to_h并稍后将其作为常规哈希处理。

添加了来自 barlop 的示例

(byebug) session[:godzilla]="thegodzilla"
"thegodzilla"
(byebug) session.to_h
{"session_id"=>"1910becce7d1a46587eede9d25e920ce",
"_csrf_token"=>"BUEarPb/jeyrHrldyY8BJhRyq9TErAG4rS00cz8aaLE==",
"" ", "godzilla"=>"thegodzilla"}
(byebug)

于 2019-04-24T15:48:55.577 回答
0

这里有一个 QnA,在视图中显示会话信息?它询问有关视图,但那里接受的答案也适用于 byebug 中的控制台

session.inspect.to_s

是你想要的输出字符串。

那么你当然可以session.inspect.to_s[0..100]

(byebug) session.inspect.to_s.last(300)
" @port=nil, @method=nil, @request_method=nil, @remote_ip=nil, @original_fullpath=nil, @fullpath=nil, @ip=nil>, @delegate={\"session_id\"=>\"1910becce7d1a46587eede9d25e920ce\", \"_csrf_token\"=>\"BUEarPb/jeyrHrldyY8BJhRyq9TErAG4rS00cz8aaLE=\", \"a\"=>\"3\", \"godzilla\ "=>\"thegodzilla\"}, @loaded=true, @exists=true>"
(byebug)

我认为 vasfed 对 session.to_h 的回答非常适合显示会话的变量及其相关部分..(尽管我的问题要求任何部分)

虽然这个答案显示了变量(虽然不如 vasfed 的答案那么简洁),但这个答案在技术上回答了我的问题,即要求将整个事情作为一个字符串来显示它的任何部分。

于 2019-04-24T16:22:44.497 回答