Has_and_belongs_to_many

Ciao ragazzi, ho un problema che non riesco a risolvere, spero che
qualcuno possa illuminarmi, allora:

ho le seguenti tabelle:

create_table :carts do |t|
  t.belongs_to :user
  t.boolean    :escapee,    :default => 0
  t.timestamp  :escapee_at
  t.timestamps
end

create_table "products" do |t|
  t.column " id",  :integer
  t.column "name",    :string
end

create_table "carts_products", :id => false, :force => true do |t|
  t.column "cart_id",     :integer
  t.column "product_id",  :integer
  t.column "quantity",    :integer
end

e il seguente modello

class Cart < ActiveRecord::Base
has_and_belongs_to_many :products

def self.update_carts(session_cart)
    cart = self.find(:first, :order => "created_at DESC", :limit =>

1, :conditions => “escapee=0”)
product_ids = []
session_cart.each do |id, item|
product_ids << [id]
end
cart.update_attributes(:product_ids => product_ids)
end
end

Dal controller:

if logged_in?
current_user.carts.update_carts session[:cart]
end

Volevo sapere come poter incrementare il campo quantità qualora il
record esista. Spero di essere stato chiaro nel farvi capire cosa
cerco.

Un grazie in anticipo a tutti quelli che risponderanno.

Ciao ciao,

Salvatore

2009/8/1 Salvatore [email protected]:

end

create_table “carts_products”, :id => false, :force => true do |t|
t.column “cart_id”, :integer
t.column “product_id”, :integer
t.column “quantity”, :integer
end

ciao,
quando la tabella associativa contiene altri campi oltre ai due id,
per quel che so non si usa has_and_belongs_to_many ma has_many
through,
così:

class Cart < ActiveRecord::Base
has_many :carts_products
has_many :products, :through => :carts_products
end

class Products < ActiveRecord::Base
has_many :carts_products
has_many :carts, :through => :carts_products
end

class CartsProduct < ActiveRecord::Base # nota: plurale/singolare
belongs_to :cart
belongs_to :product
end

poi potrai usare @cart.products e @product.carts, ma anche
@cart.carts_products.first().quantity.

per quello che vuoi fare, credo ti basti aggiungere pochi metody alle
classi, o forse ancora meglio all’associazione, modificando l’esempio
riportato in

class Account < ActiveRecord::Base
has_many :people do
def find_or_create_by_name(name)
first_name, last_name = name.split(" ", 2)
find_or_create_by_first_name_and_last_name(first_name,
last_name)
end
end
end

person = Account.find(:first).people.find_or_create_by_name(“David
Heinemeier H.”)
person.first_name # => “David”
person.last_name # => “Heinemeier H.”

pietro