Forum: Italian Ruby user group [Help] Come aggiungere un legame nella join table, "soft"

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Eff93e9bbe063b7136c9b6f218071a09?d=identicon&s=25 Marco Mastrodonato (marcomd)
on 2009-02-08 00:24
Quesito 1.
Ho due modelli:

class Engine < ActiveRecord::Base
  has_and_belongs_to_many :technologies, :join_table =>
"enginetechnologies"
end

class Technology < ActiveRecord::Base
  has_and_belongs_to_many :engines, :join_table => "enginetechnologies"
end

Quando creo un nuovo engine voglio associare una o più technologies.

Engine.find(1).technologies<<Technology.find(1)<<Technology.find(2)

ok, ma al successivo:

Engine.find(2).technologies<<Technology.find(1)<<Technology.find(2)

PRIMARY KEY must be unique: INSERT INTO "enginetechnologies"
("updated_at", "engine_id", "technology_id", "id", "created_at") VALUES
('2009-02-03 18:25:49', 2, 1, 1, '2009-02-03 18:25:49')

perchè l'id della join è sempre 1??? (il db è sqlite3 e la tabella ha
l'id autoincrement)

Quesito 2.
Se volessi ottimizzare le performance ed evitare la select ogni volta
che aggiungo una technology (al di là del discorso cache), come posso
fare?

Grazie ciao.
Eff93e9bbe063b7136c9b6f218071a09?d=identicon&s=25 Marco Mastrodonato (marcomd)
on 2009-02-08 01:31
Per il quesito 1, ho eliminato la primary key ed ora funziona.
  def self.up
    create_table :engines_technologies, :id => false do |t|
      t.belongs_to :engine
      t.belongs_to :technology

      t.timestamps
    end
    add_index :engines_technologies, :engine_id
    add_index :engines_technologies, :technology_id
  end

...ed ho creato gli indici, non so se ha senso con un db come sqlite

il dubbio permane sul quesito 2
This topic is locked and can not be replied to.