Ich stoße in Ruby on Rails auf etwas Seltsames. Ich arbeite an einer Website, auf der Nutzer bestimmte Dinge kaufen und einen mehrstufigen Checkout-Prozess durchlaufen können. Ich verwende ein Session-Objekt als Hash, um Daten zu anderen Aktionen im Controller zu übertragen.Ruby on Rails verändert verschachtelte Hash-Schlüssel von Symbolen zu Strings
Hier ist, was es sieht im Grunde wie
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
So habe ich einige Daten in der ersten POST-Anforderung des Formulars erstellt das Items
Modell. Gehen wir zur nächsten Seite, auf der der Benutzer Rechnungsinformationen eingibt.
def billing_info
if request.get?
@items_to_purchase = session[:checkout_data][:items_to_purchase]
end
if request.post?
# ...
end
end
end
Mein Problem ist auf der Linie
@items_to_purchase = session[:checkout_data][:items_to_purchase].
Der Schlüssel :items_to_purchase
nicht vorhanden ist, und stattdessen ist 'items_to_purchase'
der Schlüssel. Was ist passiert? Ich habe diesen Schlüssel speziell initialisiert, um ein Symbol anstelle einer Zeichenfolge zu sein! Ruby hat es hinter meinem Rücken verändert! Scheint dies nicht zu tun, wenn ich nur einen flachen Hash habe, aber mit diesen verschachtelten Hashes tritt dieses Problem auf.
Jeder hat einen Einblick, was passiert?