【问题标题】:How to access a multidimensional hash session?如何访问多维哈希会话?
【发布时间】:2010-12-12 14:45:33
【问题描述】:

我正在使用 Ruby on Rails 的 session 方法,所以我有一个像这样的 session[:user_params] 哈希:

password_confirmation: "test"
password: test
email: test@test.ij

我可以在我的视图文件中使用语法 session[:user_params] 访问它。

现在我只想访问 'email' 参数,但尝试使用 session[:user_params][:email],我总是得到一个空值。如何访问这个值?

【问题讨论】:

  • 我认为会话不支持字符串以外的其他值,但我不确定。但是在会话中存储太多信息绝不是一件好事。如果必须,请尝试序列化您的哈希。

标签: ruby-on-rails session hash hash-of-hashes


【解决方案1】:

你可以试试session[:user_params]['email']。我不确定 Rails 是否会将整个会话哈希序列化/反序列化为 HashWithIndifferentAccess。

【讨论】:

    【解决方案2】:

    我不确定你是如何设置存储在 :user_params 中的哈希值,但我会这样做,而且它似乎可以工作:

    puts "  email: '#{session[:user_params][:email]}'"
    
    session[:user_params] ||= {}
    session[:user_params][:password_confirmation] = "test"
    session[:user_params][:password] = "test"
    session[:user_params][:email] = "test@test.ij"
    

    如果您第一次将此代码放入控制器操作中,您将看到电子邮件的 ''。第二次它将显示电子邮件的“test@test.ij”。希望对您有所帮助。

    【讨论】:

    • 谢谢,但这对我没有帮助。我只想在我的视图文件中显示使用以下内容的电子邮件地址:.
    • 将电子邮件从控制器放入会话后,您可以使用刚刚发布的代码从视图中访问它:。
    • 我的目标是 我认为这是获得我想要的最短/最简单的方法。
    • 如果您将 :email 和 "email" 混合作为哈希的键,那么这可能就是它不起作用的原因。尝试从 Rails 控制台评估 :email == "email" ,您会发现它们不相等。尝试切换为仅使用 :email。如果这不起作用,请发布您正在使用的其余代码,也许还有其他东西。
    猜你喜欢
    • 2021-12-10
    • 1970-01-01
    • 2012-12-30
    • 2012-04-25
    • 2012-09-15
    • 2011-02-26
    • 2014-05-06
    • 2012-09-06
    • 1970-01-01
    相关资源
    最近更新 更多