Rails 4.x
Saat Anda sudah memiliki users
dan uploads
tabel dan ingin menambahkan hubungan baru di antara mereka.
Yang perlu Anda lakukan adalah: cukup buat migrasi menggunakan perintah berikut:
rails g migration AddUserToUploads user:references
Yang akan membuat file migrasi sebagai:
class AddUserToUploads < ActiveRecord::Migration
def change
add_reference :uploads, :user, index: true
end
end
Kemudian, jalankan migrasi menggunakan rake db:migrate
. Migrasi ini akan membantu menambahkan kolom baru bernama user_id
to uploads
table (merujuk id
kolom dalam users
tabel), PLUS juga akan menambahkan indeks pada kolom baru.
PEMBARUAN [Untuk Rails 4.2]
Rail tidak dapat dipercaya untuk mempertahankan integritas referensial; database relasional datang untuk menyelamatkan kami di sini. Artinya adalah bahwa kita dapat menambahkan batasan kunci asing di tingkat basis data itu sendiri dan memastikan bahwa basis data akan menolak operasi apa pun yang melanggar integritas referensial yang disetel ini. Seperti yang dikomentari @infoget, Rails 4.2 dikirimkan dengan dukungan asli untuk kunci asing (integritas referensial) . Ini tidak diperlukan tetapi Anda mungkin ingin menambahkan kunci asing (karena sangat berguna) ke referensi yang kami buat di atas.
Untuk menambahkan kunci asing ke referensi yang ada , buat migrasi baru untuk menambahkan kunci asing:
class AddForeignKeyToUploads < ActiveRecord::Migration
def change
add_foreign_key :uploads, :users
end
end
Untuk membuat referensi yang benar-benar baru dengan kunci asing (dalam Rails 4.2) , hasilkan migrasi menggunakan perintah berikut:
rails g migration AddUserToUploads user:references
yang akan membuat file migrasi sebagai:
class AddUserToUploads < ActiveRecord::Migration
def change
add_reference :uploads, :user, index: true
add_foreign_key :uploads, :users
end
end
Ini akan menambahkan kunci asing baru ke user_id
kolom uploads
tabel. Kunci referensi id
kolom dalam users
tabel.
CATATAN: Ini selain menambahkan referensi sehingga Anda masih perlu membuat referensi terlebih dahulu daripada kunci asing ( Anda dapat memilih untuk membuat kunci asing dalam migrasi yang sama atau file migrasi terpisah ). Rekaman Aktif hanya mendukung kunci asing kolom tunggal dan saat ini saja mysql
, mysql2
dan PostgreSQL
adaptor didukung. Jangan coba ini dengan adaptor lain seperti sqlite3
, dll. Lihat Panduan Rails: Kunci Asing untuk referensi Anda.