Rotaie 4.x
Quando hai già users e uploadstabelle e desideri aggiungere una nuova relazione tra di loro.
Tutto quello che devi fare è: basta generare una migrazione usando il seguente comando:
rails g migration AddUserToUploads user:references
Che creerà un file di migrazione come:
class AddUserToUploads < ActiveRecord::Migration
def change
add_reference :uploads, :user, index: true
end
end
Quindi, eseguire la migrazione utilizzando rake db:migrate. Questa migrazione si occuperà dell'aggiunta di una nuova colonna denominata user_idnella uploadstabella (facendo riferimento alla idcolonna nella userstabella), INOLTRE aggiungerà anche un indice sulla nuova colonna.
AGGIORNAMENTO [For Rails 4.2]
Non ci si può fidare delle rotaie per mantenere l'integrità referenziale; database relazionali vengono in nostro soccorso qui. Ciò significa che possiamo aggiungere vincoli di chiave esterna a livello del database stesso e garantire che il database respingerebbe qualsiasi operazione che viola questa serie integrità referenziale. Come ha commentato @infoget, Rails 4.2 viene fornito con supporto nativo per le chiavi esterne (integrità referenziale) . Non è richiesto ma potresti voler aggiungere una chiave esterna (poiché è molto utile) al riferimento che abbiamo creato sopra.
Per aggiungere una chiave esterna a un riferimento esistente , creare una nuova migrazione per aggiungere una chiave esterna:
class AddForeignKeyToUploads < ActiveRecord::Migration
def change
add_foreign_key :uploads, :users
end
end
Per creare un riferimento completamente nuovo con una chiave esterna (in Rails 4.2) , generare una migrazione utilizzando il comando seguente:
rails g migration AddUserToUploads user:references
che creerà un file di migrazione come:
class AddUserToUploads < ActiveRecord::Migration
def change
add_reference :uploads, :user, index: true
add_foreign_key :uploads, :users
end
end
Ciò aggiungerà una nuova chiave esterna alla user_idcolonna della uploadstabella. La chiave fa riferimento alla idcolonna nella userstabella.
NOTA: questo è in aggiunta all'aggiunta di un riferimento, quindi è ancora necessario creare prima un riferimento, quindi una chiave esterna ( è possibile scegliere di creare una chiave esterna nella stessa migrazione o in un file di migrazione separato ). Attivo Record supporta solo a colonna singola chiavi esterne e attualmente solo mysql, mysql2e PostgreSQLsono supportati gli adattatori. Non provarlo con altri adattatori come sqlite3, ecc. Fare riferimento a Guide Rails: chiavi esterne per riferimento.