Saya ingin membuat migration
di Rails, mereferensikan tabel lain. Biasanya, saya akan melakukan sesuatu seperti:
add_column :post, :user, :references
Ini membuat kolom bernama user_id
dalam posts
tabel. Tetapi bagaimana jika, alih-alih user_id
, saya menginginkan sesuatu seperti itu author_id
? Bagaimana saya bisa melakukan itu?
schema_plus
permata,t.references :category, index: true, foreign_key: true, references: :match_categories
juga berfungsi untuk saya dalam file migrasi.Untuk Rails 5+
Definisi Awal:
Jika Anda mendefinisikan
Post
tabel model Anda, Anda dapat mengaturreferences
,index
danforeign_key
dalam satu baris:Perbarui yang Ada:
Jika Anda menambahkan referensi ke tabel yang sudah ada, Anda bisa melakukan ini:
Catatan: Nilai default
index
adalah benar.sumber
null
s. Untuk tidak mengizinkannya, tambahkan opsi biasanull: false
.Di Rails 4.2+ Anda juga dapat mengatur kunci asing di db, yang merupakan ide bagus .
Untuk asosiasi sederhana, ini juga dapat dilakukan dengan
t.references
menambahkanforeign_key: true
, tetapi dalam kasus ini Anda memerlukan dua baris.sumber
references: :users
opsi saatadd_reference
menelepon. Saya tidak melihatnya didokumentasikan di dokumen dan tampaknya berfungsi di pihak saya tanpa itu.Di rel 4, saat menggunakan postgresql dan permata schema_plus Anda cukup menulis
Ini akan membuat kolom
author_id
, yang mengacu dengan benarusers(id)
.Dan dalam model Anda, Anda menulis
Catatan, saat membuat tabel baru Anda dapat menuliskannya sebagai berikut:
sumber
create_table
:t.references :author, references: :users
:references
benar - benar berfungsi.schema_plus
permata itu selama berabad-abad, dan itu sebenarnya menambahkan fungsi itu. Saya mengedit jawaban saya sesuai.t.references :col_name, references: other_table_name
berfungsi tanpa memasang permata tambahan.Jika Anda tidak menggunakan kunci asing, maka tidak masalah apa nama tabel sebenarnya dari tabel lain.
Pada Rails 5 , jika Anda menggunakan kunci asing, Anda dapat menentukan nama tabel lain di opsi kunci asing. (lihat https://github.com/rails/rails/issues/21563 untuk diskusi)
Sebelum Rails 5, Anda harus menambahkan kunci asing sebagai langkah terpisah:
sumber
{to_table: :users}
alias_attribute (nama_baru, nama_lama) sangat berguna. Buat saja model Anda dan hubungannya:
lalu edit model dan tambahkan alias atribut dengan
Setelah itu Anda akan dapat menjalankan hal-hal seperti
sumber