I replicated 2 scenareos and neither of them do what you have
described:

has and belongs to many scenario

== models

class Product
  has_and_belongs_to_many :categories
end

class Category
  has_and_belongs_to_many :products
end

== db

create_table "categories", :force => true do |t|
    t.string   "name"
  end

  create_table "categories_products", :id => false, :force => true do |
t|
    t.integer "product_id"
    t.integer "category_id"
  end

  create_table "products", :force => true do |t|
    t.string   "name"
    t.integer  "price"
  end

== test

>> p = Product.new :name => "cool bike", :price => 123
=> #<Product id: nil, name: "cool bike", price: 123>
>> p.categories << c
=> [#<Category id: 1, name: "bikes">]
>> p.save
=> true
>> p.categories
=> [#<Category id: 1, name: "bikes">]


Same thing with has_many :through. which leads me to believe you
havent set your relationships right. Could you show us the mdoel and
table code plz?

On Mar 17, 5:11 am, ball <[email protected]> wrote:
> It didn't exist before hand. ActiveRecord is triggering two inserts. I
> have included a full example and the SQL
>
>   catBike = Category.new(:name => "Bikes")
>   catBike.save
>
>   p = Product.new(:name => "Cannondale Bike", :price => 1000)
>   p.save
>   p.categories << catBike # This works great.
>
>   p = Product.new(:name => "Trek Bike", :price => 900)
>   p.categories << catBike # this causes two entriens to be created
>   p.save
>
>  Category Create (1.0ms)   INSERT INTO `categories` (`name`) VALUES
> ('Bikes')
>  Product Create (0.0ms)   INSERT INTO `products` (`name`, `price`)
> VALUES('Cannondale Bike', 1000)
>  SQL (0.0ms)   COMMIT
>  SQL (0.0ms)   BEGIN
>  categories_products Columns (10.0ms)   SHOW FIELDS FROM
> `categories_products`
>  SQL (1.0ms)   INSERT INTO `categories_products` (`product_id`,
> `category_id`) VALUES (1, 1)
>  SQL (0.0ms)   COMMIT
>  SQL (0.0ms)   BEGIN
>  SQL (0.0ms)   COMMIT
>  SQL (0.0ms)   BEGIN
>  Product Create (1.0ms)   INSERT INTO `products` (`name`, `price`)
> VALUES('Trek Bike', 900)
>  categories_products Columns (7.0ms)   SHOW FIELDS FROM
> `categories_products`
>  SQL (1.0ms)   INSERT INTO `categories_products` (`product_id`,
> `category_id`) VALUES (2, 1)
>  categories_products Columns (7.0ms)   SHOW FIELDS FROM
> `categories_products`
>  SQL (0.0ms)   INSERT INTO `categories_products` (`product_id`,
> `category_id`) VALUES (2, 1)
>  SQL (0.0ms)   COMMIT
>
> On Mar 16, 4:50 pm, Phlip <[email protected]> wrote:
>
> > > p.categories now has TWO catBike
>
> > Because << does not ask questions. It just adds a catBike. If you already 
> > had
> > one, now you have two.
>
> > You might need some combination of these:
>
> >    a :unique => true on the habtm (spelling?)
> >    a unique key (index) on the database
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to