Trzymanie danych w cookies - dostęp

Witam

Jestem grafikiem, koderem html/css i kocham prototypować funkcjonalności serwisów www. Do niedawna użytkowałem gotowe rozwiązania typu Wordpress, jednak rozbudowa takich serwisów bez znajomości programowania w php ogranicza się do implementacji gotowych pluginów które niestety pod względem użytkowania od strony użytkownika pozostawiają wiele do życzenia. Dlatego właśnie postanowiłem nauczyć się programowania by mieć pełen wpływ na wygląd i zachowanie moich serwisów, wybór padł na RoR, będzie to mój pierwszy język.

Przechodząc do sedna, aktualnie przerabiam książkę Agile Programowanie w Rails Wydanie II (ta z opisem sklepu
), pracuje na ruby 1.8.7 i railsach 2.3.5, i zwiesiłem się na przechowywaniu sesji użytkownika. Książka opiera się na starych railsach gdzie sesja domyślnie trzymana jest w bazie danych, ja postanowiłem użyć cookies.
Aplikacja to lista książek z buttonem pod każdą pozycją, klikniecie powoduje dodanie jej do listy zakupów.
Nie umieszczam w cookies całej klasy którą jest książka (tytuł, opis, cena) bo plik cookies szybko by urósł powyżej 4kB, umieszczam tylko ID książki.

Tak wygląda <%= debug(@cart) %>:

[code]— !ruby/object:Cart
items:

  • !ruby/object:CartItem
    product: “2”
    quantity: 1
  • !ruby/object:CartItem
    product: “2”
    quantity: 1
  • !ruby/object:CartItem
    product: “2”
    quantity: 1
  • !ruby/object:CartItem
    product: “1”
    quantity: 1[/code]
    Naprowadźcie mnie jak zamiast dodawać nową pozycje sprawdzić czy dana pozycja jest już w cookies iinkrementować quantity. Czy w ogóle to rozwiązanie jest sensowne?
    W modelu Cart próbowałem skonstruować zapytania wyszukującego w cookies dane ID czyli “product” ale nic z moich kombinacji nie uzyskałem, liczę na podpowiedz.

Jak to rozkminie to na podstawie ID w cookies wyszukam dana książkę i wyświetlę informacje o niej (cena i ilością sztuk) w widoku.

Kontroler

[code]class StoreController < ApplicationController
def index
@products = Product.find_products_for_sale
end

def add_to_cart
@cart = find_cart
productid = params[:id]
@cart.add_product(productid)
end

def find_from_cart_id

end

private
def find_cart
session[:cart] ||= Cart.new
end

end[/code]
Model Cart

[code]class Cart

attr_accessor :items

def initialize
	@items = []
end

def add_product(product)
current_item = ????
    if current_item
     current_item.increment_quantity
    else
      @items << CartItem.new(product)
    end
end

def add_product0ld(product)	
	@items << product.id	
end	

end[/code]
Model CartItem

[code]class CartItem

attr_accessor :product, :quantity

def initialize(product)
@product = product
@quantity = 1
end

def increment_quantity
@quantity += 1
end

def title
@product.title
end

def price
@product.price * @quantity
end

end[/code]
Widok dla akcji add_to_cart

<h1>Twoj koszyk</h1> <%= debug(@cart) %>

nie sprawdzałem, ale

cookies to Hash wiec wystarczy, że sprawdzisz czy w hash jest element o takim id, jak tak to :ilosc++, inaczej dodajesz nowy i tyle

jak w pomocy do ruby jest dział Hash

Zeby nie było że nie pomagam znowu tekstów:

cookies[:id] = :ile

np
cookies[1] = 2

unless cookies[1].nil? cookies[1] += 1 else cookies[id] = ile end
coś takiego powinno działać, można inaczej to zapisać ale tak jest chyba czytelnie?