在 byebug 的 rails 中,如何将会话变量的输出视为字符串,只显示其中的一部分?
In rails from byebug, how can I view the output of the session variable as a string, displaying only part of it?
在 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) session
@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 Llamas
in Pajamas", "GATEWAY_INTERFACE"=>"CGI/1.2", "REQUEST_METHOD"=>"GET",
"REQUEST_PATH"=>"/", "REQUEST_URI"=>"/", "HTTP_VERSION"=>"HTTP/1.1",
"HTTP_HO ............
...........
我尝试了 session.to_s 但是这使得这个字符串不只是将上面的输出转换为字符串。
(byebug) session.to_s
"#<ActionDispatch::Request::Session:0x00007fa60ee91270>"
(byebug)
您可以使用 session.to_h
并稍后将其作为常规哈希处理。
添加了来自 barlop 的示例
(byebug) session[:godzilla]="thegodzilla"
"thegodzilla"
(byebug) session.to_h
{"session_id"=>"1910becce7d1a46587eede9d25e920ce",
"_csrf_token"=>"BUEarPb/jeyrHrldyY8BJhRyq9TErAG4rS00cz8aaLE=",
"a"=>"3", "godzilla"=>"thegodzilla"}
(byebug)
这里有一个 QnA,Show session information in a view? 它询问有关视图的问题,但那里接受的答案也适用于 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 的答案那么整齐),但是这个答案在技术上回答了我的问题,这个问题要求将整个事物作为一个字符串来显示它的任何部分。
在 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) session
@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 Llamas in Pajamas", "GATEWAY_INTERFACE"=>"CGI/1.2", "REQUEST_METHOD"=>"GET", "REQUEST_PATH"=>"/", "REQUEST_URI"=>"/", "HTTP_VERSION"=>"HTTP/1.1", "HTTP_HO ............ ...........
我尝试了 session.to_s 但是这使得这个字符串不只是将上面的输出转换为字符串。
(byebug) session.to_s
"#<ActionDispatch::Request::Session:0x00007fa60ee91270>"
(byebug)
您可以使用 session.to_h
并稍后将其作为常规哈希处理。
添加了来自 barlop 的示例
(byebug) session[:godzilla]="thegodzilla"
"thegodzilla"
(byebug) session.to_h
{"session_id"=>"1910becce7d1a46587eede9d25e920ce",
"_csrf_token"=>"BUEarPb/jeyrHrldyY8BJhRyq9TErAG4rS00cz8aaLE=",
"a"=>"3", "godzilla"=>"thegodzilla"}
(byebug)
这里有一个 QnA,Show session information in a view? 它询问有关视图的问题,但那里接受的答案也适用于 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 的答案那么整齐),但是这个答案在技术上回答了我的问题,这个问题要求将整个事物作为一个字符串来显示它的任何部分。