ruby-on-rails – Ruby on Rails偷偷地将嵌套的哈希键从符号更改为字符串

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – Ruby on Rails偷偷地将嵌套的哈希键从符号更改为字符串前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在 Ruby on Rails中遇到了一些奇怪的东西.我正在开发一个网站,允许用户购买某些东西并进行多步结算流程.我使用会话对象作为哈希来将数据传递给控制器​​中的其他操作.

这是它的基本外观

class CheckoutController < ApplicationController
  def index
    #stuff
  end
  def create
    #stuff

    session[:checkout_data] = {} #initialize all the checkout data as hash
    # Insert the :items_to_purchase key with the value as a new Items model instance
    session[:checkout_data][:items_to_purchase] = Items.new(post_data_params) #as an example

    redirect_to :action => 'billing_info'
  end

所以我使用Items模型在表单的第一个POST请求中创建了一些数据.让我们转到用户输入结算信息的下一页.

def billing_info
    if request.get?
      @items_to_purchase = session[:checkout_data][:items_to_purchase]
    end
    if request.post?
      # ...
    end
  end
end

我的问题就在于此

@items_to_purchase = session[:checkout_data][:items_to_purchase].

关键字:items_to_purchase不存在,相反,’items_to_purchase’是关键.发生了什么?我特意将该键初始化为符号而不是字符串! Ruby改变了我的背后!如果我只有一个平面哈希,它似乎不会这样做,但是使用这些嵌套哈希,会出现此问题.

有人对正在发生的事情有任何见解吗?

解决方法

如果您正在使用cookie,那么会话不会存在于Ruby中 – 它们会在网络中来回传输.您存储数据的会话对象与您尝试从中读取的会话对象不同.而在cookie形式中,字符串和符号之间没有区别.使用Hash#symbolize_keys!确保你有你想要的钥匙,或只是一致地使用字符串键.

猜你在找的Ruby相关文章