ruby-on-rails – Ruby on Rails偷偷地将嵌套的哈希键从符号更改
发布时间:2020-12-16 23:10:29 所属栏目:百科 来源:网络整理
导读:我在 Ruby on Rails中遇到了一些奇怪的东西.我正在开发一个网站,允许用户购买某些东西并进行多步结算流程.我使用会话对象作为哈希来将数据传递给控制器??中的其他操作. 这是它的基本外观 class CheckoutController ApplicationController def index #stuff e
我在
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!确保你有你想要的钥匙,或只是一致地使用字符串键.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |