Szyny 4.x
Gdy już masz users i uploadstabele i chcą dodać nową relację między nimi.
Wszystko, co musisz zrobić, to: po prostu wygenerować migrację za pomocą następującego polecenia:
rails g migration AddUserToUploads user:references
Który utworzy plik migracji jako:
class AddUserToUploads < ActiveRecord::Migration
def change
add_reference :uploads, :user, index: true
end
end
Następnie uruchom migrację za pomocą rake db:migrate. Ta migracja zajmie się dodaniem nowej kolumny o nazwie user_iddo uploadstabeli (odwołując się do idkolumny w userstabeli), a także doda indeks do nowej kolumny.
AKTUALIZACJA [For Rails 4.2]
Nie można ufać Railsom, aby zachowały integralność referencyjną; Relacyjne bazy danych przychodzą nam z pomocą. Oznacza to, że możemy dodawać ograniczenia klucza obcego na poziomie samej bazy danych i upewnić się, że baza danych odrzuci każdą operację, która narusza integralność referencyjną tego zestawu. Jak skomentował @infoget, Rails 4.2 jest dostarczany z natywną obsługą kluczy obcych (integralność referencyjna) . Nie jest to wymagane, ale możesz dodać klucz obcy (ponieważ jest to bardzo przydatne) do odwołania, które utworzyliśmy powyżej.
Aby dodać klucz obcy do istniejącego odwołania , utwórz nową migrację, aby dodać klucz obcy:
class AddForeignKeyToUploads < ActiveRecord::Migration
def change
add_foreign_key :uploads, :users
end
end
Aby utworzyć całkowicie nowe odniesienie z kluczem obcym (w Rails 4.2) , wygeneruj migrację za pomocą następującego polecenia:
rails g migration AddUserToUploads user:references
który utworzy plik migracji jako:
class AddUserToUploads < ActiveRecord::Migration
def change
add_reference :uploads, :user, index: true
add_foreign_key :uploads, :users
end
end
Spowoduje to dodanie nowego klucza obcego do user_idkolumny uploadstabeli. Klucz odwołuje się do idkolumny w userstabeli.
UWAGA: Jest to dodatek do dodawania odwołania, więc nadal musisz najpierw utworzyć odniesienie, a następnie klucz obcy ( możesz wybrać utworzenie klucza obcego w tej samej migracji lub osobnym pliku migracji ). Active Record obsługuje tylko klucze obce jednokolumnowe i obecnie tylko mysql, mysql2a PostgreSQLkarty są obsługiwane. Nie próbuj tego z innymi adapterami, takimi jak sqlite3, itp. Zapoznaj się z Przewodnikami po szynach: Klucze obce w celach informacyjnych.