Ich benutze Sitzung meines Warenkorb Objekt speichernRails-Session speichert Modellobjekt
in meinem Warenkorb-Modell habe ich
def initialize
@items = Array.new
end
def clean
@items = Array.new
end
Ich möchte Sitzung verwenden Objekt ganze Wagen zu speichern, damit ich die Methode verwenden kann, oben
wie diese
@cart = session[:cart] ||= Cart.new
aber mein @cart Ausgang ist seltsam
ersten Mal laufen sie Ausgang
<%= @cart %>
#<Cart:0x007efc844d3af0>
<% @cart.clean %>
true
alles ist in Ordnung, aber das zweite Mal, es Ausgabe des Objekts Inhalt
<%= @cart %>
{"items"=>[]}
<% @cart.clean %>
undefined method `clean'
Can Session-Speicher das ganze Objekt?
Oder gibt es etwas, was ich falsch gemacht habe?
Danke.
EDIT:
<% session[:cart] = Cart.new %>
<%= session[:cart] %>
#<Cart:0x007efc868be0a0>
<% session[:cart] = session[:cart] ||= Cart.new %>
<%= session[:cart] %>
#<Cart:0x007efc868be0a0> #Because session[:cart] does not exist
<% session[:cart] = session[:cart] ||= Cart.new %>
<%= session[:cart] %>
{"items"=>[]} #Session does not store the cart object but store the cart object's content
EDIT 2:
<% @cart = session[:cart] ||= Cart.new %>
<%= @cart %> #session[:cart] is nil so print Cart.new
<br>
<% session[:cart] = Cart.new %>
<% @cart = session[:cart] ||= Cart.new %>
<%= @cart %> #session[:cart] isn't nil so print session[:cart]
Ich habe beide zwei Ausgänge sind Wagen Objekt
wenn ich die Seite und führen Sie den gleichen Code aktualisieren
<% @cart = session[:cart] ||= Cart.new %>
@cart shou ld werden die Sitzung [: Warenkorb], weil die Sitzung nicht gleich Null ist und die Sitzung [: Warenkorb] sollte Wagen Objekt sein, aber es Ausgabe "{" Elemente "=> []}"
EDIT 3:
Zum ersten Mal:
<%= session[:cart] %>
-> nil
<% session[:cart] = Cart.new %>
<%= session[:cart] %>
-> <Cart:0x00000007c112c0>
zum zweiten Mal:
<%= session[:cart] %>
-> {"items"=>[]} #Why it isn't a Cart object after I refresh?
<% session[:cart] = Cart.new %>
<%= session[:cart] %>
-> <Cart:0x00000007c112c0>
Kann Session ein Cart-Objekt speichern? Ich möchte, dass sowohl 'session [: cart] .clean' und' @ cart.clean' funktionieren, danke. –
Das Speichern von Objekten in Sitzungen ist keine gute Idee, siehe http://stackoverflow.com/questions/1095714/storing-objects-in-a-session-in-rails. Dieser Thread diskutiert die Fallstricke davon. Wenn Sie darauf bestehen, ein Objekt in der Sitzung zu speichern, müssen Sie es rekonstruieren, indem Sie Parameter an Cart.new (Sitzung [: cart]) oder etwas Ähnliches übergeben, da die Sitzung Objekte serialisiert und speichert. Hoffe das hilft. – Shishir
@Shishir Danke für die Hilfe, ich möchte nicht Warenkorb Artikel in der Datenbank zu speichern, so dass ich das Warenkorb-Objekt Sitzung und das Warenkorb-Objekt ist ein kleines Array, um Produkt-ID und Menge zu speichern. Ich verstehe nicht, warum ich die Seite aktualisiere ich bekomme die unterschiedliche Ausgabe der Sitzung. Bitte beachten Sie EDIT 2, danke. –