Sto eseguendo lavori di manutenzione su un sito di Rails esistente e sto riscontrando alcuni problemi derivanti da associazioni many-to-many. Sembra che il sito sia stato inizialmente creato usando has_and_belongs_to_many
per alcune relazioni che sono diventate più complicate nella logica di business, quindi ho bisogno di usare has_many :through
per supportare campi aggiuntivi nella tabella delle relazioni. Tuttavia, la tabella di join inizialmente utilizzata per HABTM non ha una chiave primaria e devo aggiungerne una per supportare la modellazione di relazioni separate utilizzando has_many :through
.Modellazione di rails: conversione di HABTM in has_many: tramite
Qual è il modo migliore per aggiungere una chiave primaria a una tabella esistente con molti dati? C'è un altro modo per fare ciò che sto cercando?
Per inciso, il sistema è in esecuzione su Oracle.
Grazie!
Justin
UPDATE 11/9/09 15:58: Io non sono un esperto di Oracle e sono stato perdersi nella natura selvaggia delle versioni di Oracle di non nullo, incremento automatico, e così via. Inizialmente ho provato a fare ciò che Mike e Corey raccomandavano aggiungendo un nuovo campo come chiave primaria, ma Oracle non mi permetteva di aggiungere un campo non nullo a una tabella non vuota (ORA-01758). Poi ho esportato i dati come SQL, ho abbandonato le righe, ho aggiunto il PK e l'ho impostato come non-null, poi ho cercato di importare i dati, ma ho continuato a ricevere errori con la frase "non posso inserire NULL in id ..." (ORA-01400).
Infine, ho provato a utilizzare una migrazione come suggerisce Corey nel suo commento, ma il rake ha colpito gli stessi errori che Oracle stava generando quando ho modificato manualmente il database ("non è possibile aggiungere un campo non null alla tabella non vuota"). Ho eliminato la tabella, eseguito la migrazione (che ha funzionato) e ho tentato di reimportare i dati, ma ho ricevuto gli stessi errori l'ultima volta che ho provato a importare ("impossibile inserire NULL in id ..."). Come posso salvare i miei dati e aggiungere le chiavi primarie di cui ho bisogno? So che la possibilità di scrivere un rake è stata suggerita, ma non sono sicuro su come procedere su questo fronte. Qualche idea?
Vedere anche questa domanda e le risposte più recenti: http://stackoverflow.com/questions/16159134/how-to-migrate-has-and-belongs-to-many-to-has-many-through/29067732# 29067732 – MZB