在我的Rails应用程序中,我使用Marshal访问存储在数据库中的会话数据:
<%= Marshal.load(Base64.decode64(session.data)) %>
返回以下字符串:
{"_csrf_token"=>"G/l/RK08vhzy/jMCVfmBRpCQKA5IxiACd1e0pWqMlkA=", "user_id"=>1, "ip_address"=>"127.0.0.1", "browser"=>"Chrome on Macintosh 10.11.5"}
我想要做的是直接访问ip_address
和browser
,以便我可以执行以下操作:
<%= session.data[:ip_address] %>
如何将Marshal.load
返回的内容转换为可用对象?
答案 0 :(得分:1)
这不是一个字符串,它似乎是一个哈希。尝试
<% my_session = Marshal.load(Base64.decode64(session.data)) %>
<%= my_session['ip_address'] %>
答案 1 :(得分:0)
基本上你有一个哈希,而不是一个字符串,因此你可以使用任何Hash methods访问它的键值对。
使用OpenStruct是另一种选择:
require 'ostruct'
h = {"_csrf_token"=>"G/l/RK08vhzy/jMCVfmBRpCQKA5IxiACd1e0pWqMlkA=", "user_id"=>1, "ip_address"=>"127.0.0.1", "browser"=>"Chrome on Macintosh 10.11.5"}
object = OpenStruct.new(h)
object.ip_address
#=> "127.0.0.1"
object.browser
#=> "Chrome on Macintosh 10.11.5"