2015-11-15 16 views
5

Ho un modulo su una visualizzazione di binari che invia dati a una pagina che rappresenterà una pagina di riepilogo del carrello degli acquisti.Dati di sessione di rails - Archivia in un hash

Quando invio i dati alla pagina successiva, vengono trasmessi come segue in base all'output della console.

"team"=>{"team_name"=>"Joe Blogs", "email"=>"[email protected]", "player1"=>" 
3", "player2"=>"4", "player3"=>"5"} 

voglio memorizzare questi dati è una variabile di sessione e cioè come un hash quindi se un'altra squadra viene presentata alla pagina di riepilogo che posso aggiungerlo alla sessione come un'altra voce hash. cioè squadra [1], squadra [2]. Quindi posso accedere al team [1] .team_name, ecc. E usarlo di conseguenza.

In sintesi, voglio che un utente sia in grado di compilare un modulo e averlo messo nel carrello. Possono quindi tornare indietro e fare lo stesso di nuovo. Infine, possono guardare il loro carrello e rimuovere tutti i record che non vogliono, cancellare il carrello o inviare ciò che hanno scelto nel database.

Non riesco a scoprire come farlo o se è anche possibile.

Eventuali soluzioni o suggerimenti su come implementare questo?

risposta

3

È possibile memorizzare facilmente un hash nella sessione di Rails.

Esempio:

class SomeController < ApplicationController 
    def some_action 
    session[:cart] = {"team_name"=>"Joe Blogs", "email"=>"[email protected]", "player1"=>"3", "player2"=>"4", "player3"=>"5"} 
    end 
end 

Ma, per default, Rails memorizza le sessioni di biscotti, e una dimensione di cookie è limitato a soli 4 kilobyte di dati, quindi se il vostro hash sta per contenere più di un paio di chiavi , sarà necessario utilizzare qualcos'altro per la memorizzazione della sessione, ad es il database.

Per memorizzare la sessione nel database è possibile utilizzare la gemma activerecord-session_store.

+0

Grazie per la risposta. Quindi, se volessi accedere solo alla parte team_name della sessione [: carrello], posso ancora accedervi? Inoltre, se volessi inserire più voci, una sessione potrebbe darmi una sessione [: cart] [1] ad esempio. Scusate se sembrano essenziali ma stanno cercando di capire come implementarlo. – Alan

+1

Sì, 'session [: cart]' può contenere array e hash, quindi ti restituirà tutto ciò che hai messo lì. Per esempio. 'session [: cart] ['team_name']' –

+0

Ottimo così la sessione [: cart] [1] può anche contenere un hash e posso accedervi per sessione [: cart] [1] ['team_name'] se io sat session [: cart] [1] = {"team_name" => "Joe Blogs", "email" => "[email protected]", "player1" => "3", "player2" => "4 "," player3 "=>" 5 "}? Questo mi permetterebbe di immagazzinare alcune "squadre" nella sessione? – Alan