# Gestione di un carrello spesa

**URL:** <https://www.ruby-forum.com/t/gestione-di-un-carrello-spesa/103300>\
**Category:** IT\
**Created:** [May 3, 2007, 11:31pm UTC](https://www.ruby-forum.com/t/gestione-di-un-carrello-spesa/103300 "2007-05-03T23:31:35Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![carminem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/90db22/32.png) [@carminem](https://www.ruby-forum.com/u/carminem)\
**Post date:** [May 3, 2007, 11:31pm UTC](https://www.ruby-forum.com/t/gestione-di-un-carrello-spesa/103300/1 "2007-05-03T23:31:35Z")

</div>

Salve a tutti,

StÃ² implementando un carrello spesa in un’applicazione rails.  
Tutto procede bene fin quando non accade che l’utente abbandoni la  
sessione  
senza svuotare manualmente il carrello.

In alcuni controller ho un filtro cosÃ¬ impostato:

before\_filter :get\_cart, :except =\> :empty\_cart

Dove get\_cart Ã¨ definito come:

def get\_cart  
if session[:cart]  
@cart = Cart.find(session[:cart])  
else  
if logged\_in?  
@cart = Cart.new  
@cart.user = current\_user  
@cart.save!  
session[:cart] = @cart.id  
else  
@cart = nil  
end  
end  
end

Il metodo get\_cart fissa il record nel database che rimane lÃ¬ finchÃ¨  
l’utente non procede al checkout o allo svuotamento del carrello.

Al momento non mi viene in mente nulla per far sÃ¬ che, alla chiusura del  
browser ad esempio, venga eliminato il carrello dell’utente posto che  
questo sia vuoto.

Voi come fareste? Ci vorrebbe qualcosa che facesse da garbage collector  
per  
i carrelli rimasti orfani…

Grazie in anticipo.

---

<div class="post-metadata">

**Author:** ![carminem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/90db22/32.png) [@carminem](https://www.ruby-forum.com/u/carminem)\
**Post date:** [May 4, 2007, 9:54am UTC](https://www.ruby-forum.com/t/gestione-di-un-carrello-spesa/103300/2 "2007-05-04T09:54:50Z")

</div>

On 5/3/07, Carmine M. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

Voi come fareste? Ci vorrebbe qualcosa che facesse da garbage collector

> per  
> i carrelli rimasti orfani…

Secondo me i carrelli con i prodotti dovrebbero rimanere in sessione e  
non  
nel db, e tu dovresti registrare nel db solo gli ordini effettuati. In  
questo modo daresti la possibilità all’utente di ritrovare i prodotti  
selezionati anche diversi giorni prima, sia nel caso di utente loggato  
che  
di utente sconosciuto, il che è piuttosto comodo.

Dai un’occhiata al “Depot Application” su Agile Web D. with  
Rails.

Ciao,  
Tommaso

---

<div class="post-metadata">

**Author:** ![carminem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/90db22/32.png) [@carminem](https://www.ruby-forum.com/u/carminem)\
**Post date:** [May 4, 2007, 5:05pm UTC](https://www.ruby-forum.com/t/gestione-di-un-carrello-spesa/103300/3 "2007-05-04T17:05:13Z")

</div>

Ciao Tommaso,

Tommaso P. wrote:

> Secondo me i carrelli con i prodotti dovrebbero rimanere in sessione e  
> non  
> nel db, e tu dovresti registrare nel db solo gli ordini effettuati. In  
> questo modo daresti la possibilitï¿½ all’utente di ritrovare i prodotti  
> selezionati anche diversi giorni prima, sia nel caso di utente loggato  
> che  
> di utente sconosciuto, il che ï¿½ piuttosto comodo.
> 
> Dai un’occhiata al “Depot Application” su Agile Web D. with  
> Rails.  
> In effetti, quello di Agile Web D. se non ricordo male,  
> inizialmente butta tutto il modello nella sessione, salvo poi,  
> utilizzare il solo id dell’istanza del carrello in un secondo momento.  
> In questo secondo momento, l’istanza viene memorizzata nel DB proprio  
> come ho fatto io.  
> CiÃ² avviene per svariate ragioni tra cui quella che, se memorizzi il  
> carrello (l’istanza) nella sessione e, successivamente, apporti qualche  
> modifica al modello del carrello, quelli con le sessioni appese si  
> troverebbero in difficoltÃ .  
> La cosa Ã¨ documentata anche sullo stesso libro.

Grazie per il tuo aiuto.

---

<div class="post-metadata">

**Author:** ![carminem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/90db22/32.png) [@carminem](https://www.ruby-forum.com/u/carminem)\
**Post date:** [May 4, 2007, 5:08pm UTC](https://www.ruby-forum.com/t/gestione-di-un-carrello-spesa/103300/4 "2007-05-04T17:08:53Z")

</div>

Ciao Matteo,

Matteo V. wrote:  
[…snip…]

> Poi niente ti vieta di eseguire periodicamente uno script che elimina i  
> carrelli piï¿½ vecchi di tot. L’unica accortezza che ti consiglio ï¿½ di  
> scrivere lo script in ruby (e non in sql!) ed eseguirlo con  
> script/runner.  
> In questo modo puoi usare i tuoi modelli ActiveRecord, con tutte le loro  
> validazioni.

Interessante, non conosco “script/runner” ma stasera gli dÃ² un’occhiata.

Grazie 1000!

---

<div class="post-metadata">

**Author:** ![carminem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/90db22/32.png) [@carminem](https://www.ruby-forum.com/u/carminem)\
**Post date:** [May 4, 2007, 10:11am UTC](https://www.ruby-forum.com/t/gestione-di-un-carrello-spesa/103300/5 "2007-05-04T10:11:52Z")

</div>

On 5/4/07, Tommaso P. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> questo modo daresti la possibilità all’utente di ritrovare i prodotti  
> selezionati anche diversi giorni prima, sia nel caso di utente loggato che  
> di utente sconosciuto, il che è piuttosto comodo.

Per fare in modo che il carrello persista è giusto salvare il carrello nel  
db. Guarda come fa Amazon che è il negozio online più popolare del pianeta:  
il tuo carrello viene conservato per mesi!

Poi niente ti vieta di eseguire periodicamente uno script che elimina i  
carrelli più vecchi di tot. L’unica accortezza che ti consiglio è di  
scrivere lo script in ruby (e non in sql!) ed eseguirlo con  
script/runner.  
In questo modo puoi usare i tuoi modelli ActiveRecord, con tutte le loro  
validazioni.

M

Dai un’occhiata al “Depot Application” su Agile Web D. with  
Rails.

Ciao,
