Saya bingung tentang cara membuat model yang menjadi milik model lain. Buku saya menggunakan sintaks ini untuk mengaitkan Micropost dengan Pengguna:
rails generate model Micropost user_id:integer
tetapi http://guides.rubyonrails.org/ mengatakan untuk melakukannya seperti ini:
rails generate model Micropost user:references
Migrasi yang dihasilkan oleh 2 ini berbeda. Juga, untuk yang pertama, bagaimana rel tahu itu user_id
adalah referensi kunci asing user
? Terima kasih!
sumber
Rails sendiri tidak tahu bahwa itu
user_id
adalah referensi kunci asinguser
. Dalam perintah pertamarails generate model Micropost user_id:integer
hanya menambahkan kolomuser_id
namun rel tidak tahu penggunaan col. Anda harus secara manual meletakkan garis dalamMicropost
modelkata kunci
belongs_to
danhas_many
menentukan hubungan antara model-model ini dan menyatakanuser_id
sebagai kunci asing untukUser
model.Perintah selanjutnya
rails generate model Micropost user:references
menambahkan barisbelongs_to :user
dalamMicropost
model dan dengan ini menyatakan sebagai kunci asing.FYI
Mendeklarasikan kunci asing menggunakan metode sebelumnya hanya membuat Rails tahu tentang hubungan model / tabel. Basis data tidak diketahui tentang hubungannya. Karena itu ketika Anda membuat Diagram EER menggunakan perangkat lunak seperti
MySql Workbench
Anda menemukan bahwa tidak ada thread hubungan yang ditarik antara model. Seperti pada gambar berikutNamun, jika Anda menggunakan metode yang lebih baru, Anda menemukan bahwa file migrasi Anda terlihat seperti:
Sekarang kunci asing diatur di tingkat basis data. dan Anda dapat menghasilkan
EER
diagram yang tepat .sumber
add_foreign_key
aksi dengan opsiforeign_key: true
ket.references
saluran, yang menyiratkanindex: true
. Jadi sekarangt.references :user, foreign_key: true
. Saat ini tidak ada dokumentasi untukforeign_key
opsi yang tersedia, jadi ini hanya asumsi saya.add_reference
tindakan memiliki:foreign_key
opsi yang menambahkan batasan kunci asing yang sesuai . Saya kira opsi ini akan melakukan hal yang sama saat membuat tabel.add_foreign_key :microposts, :users
perbedaan untuk Rails?Untuk yang pertama, konvensi tentang konfigurasi. Rails default saat Anda mereferensikan tabel lain dengan
adalah mencari
something_id
.references
, ataubelongs_to
sebenarnya cara penulisan yang lebih baru dengan beberapa kebiasaan.Penting untuk diingat bahwa itu tidak akan membuat kunci asing untuk Anda. Untuk melakukan itu, Anda perlu mengaturnya secara eksplisit menggunakan:
atau (perhatikan bentuk jamak):
sumber
:polymorphic
opsi (yang IMHO, untuk sebagian besar kasus, bukan ide yang baik). Jika Anda ingin menggunakan kunci asing di ActiveRecord, gunakan orang asing .add_foreign_key
telah membuatnya menjadi ActiveRecord.