我是 Ruby on Rails 的一名开发者。我正在开发一个网站,允许用户购买某些物品并完成多个步骤的结账过程。我使用 session 对象作为哈希表,在控制器中传递数据到其他操作。
以下是代码示例:
我的问题出在这一行。
关键字`:items_to_purchase`不存在,而实际上,关键字是`'items_to_purchase'`。发生了什么?我明确地将该关键字初始化为符号而不是字符串!Ruby在背后进行了更改!如果只有一个扁平的哈希表,它似乎不会这样做,但是在这些嵌套的哈希表中,就会出现这个问题。
有人知道正在发生什么吗?
以下是代码示例:
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
所以,在表单的第一个POST请求中,我使用了Items
模型创建了一些数据。让我们进入下一页,用户输入结算信息。
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在背后进行了更改!如果只有一个扁平的哈希表,它似乎不会这样做,但是在这些嵌套的哈希表中,就会出现这个问题。
有人知道正在发生什么吗?