Jadi saya memiliki create_table seperti ini untuk Kursus di Sekolah:
create_table :courses do |t|
t.string :name
t.references :course
t.timestamps
end
tetapi saya ingin merujuk pada dua kursus lain seperti:
has_many :transferrable_as # A Course
has_many :same_as # Another Course
Bisakah saya mengatakan yang berikut ini?
t.references :transferrable_as, :as=> :course
foreign_key
opsi dalam pembuatan tabel seperti ini, itu menimbulkan kesalahan yang mengatakan bahwa tabel yang saya buat tidak ada ... Jadi saya curiga itu tidak benar-benar didukung oleh API resmi.index
telah ditambahkan ke kunci asing pada Rails stackoverflow.com/questions/39769981/…Anda bisa melakukannya dengan cara ini:
atau digunakan
t.belongs_to
sebagai alias untukt.references
Anda tidak dapat menambahkan
foreign_key: true
ke dua baris referensi tersebut. Jika Anda ingin menandainya sebagai kunci asing di tingkat database, Anda perlu melakukan migrasi dengan ini:Memperbarui
Di Rails 5.1 dan di atasnya, Anda dapat menambahkan kunci asing dalam migrasi di
create_table
blok seperti ini:sumber
foreign_key: true
ke garis referensi adalah apa yang membuat saya tersandung. Menambahkanadd_foreign_key
dan menentukan nama kolom untuk itu berhasil.schema_plus
permata. Dokumen add_reference Rails tidak menyebutkan opsi: referensi.references:
opsi itu (t.references
bukankah itu hanya relevan pada tingkat model, dengan pertimbangan foreign_key diurus olehadd_foreign_key
?t.references
mengatakan "tambahkan bidang ke tabel ini yang merupakan kunci utama dari tabel lain." Thereferences:
pilihan mengatakan itu yang meja itu adalah kunci utama (diperlukan jika tidak jelas dengan nama lapangan). Theadd_foreign_key
Fungsi memberitahu database untuk ditegakkan integritas referensial di sini.add_foreign_key
baris - baris tersebut menginformasikan database apa itu kunci asing dari apa. Thereferences:
parameter melakukan apa-apa.Saya pikir utas ini memiliki cara Rails-ish yang berbeda: Scaffolding ActiveRecord: dua kolom dengan tipe data yang sama
Dalam migrasi:
sumber
PG::UndefinedTable: ERROR
karena mencoba menambahkan batasan kunci asing ke tabel yang tidak ada.belongs_to
hanya sebuah alias untukreferences
dan sehingga memiliki fungsi yang sama persis.Sebagai jawaban tambahan untuk pertanyaan ini - Model harus memiliki baris berikut untuk menyelesaikan pengaitan:
sumber
Saya tidak berpikir
references
menerima:as
opsi, tetapi Anda dapat membuat kolom Anda secara manual ...sumber