Bagaimana cara saya script/generate migration
membuat tabel gabungan untuk suatu has_and_belongs_to_many
hubungan?
Aplikasi ini berjalan di Rails 2.3.2, tetapi saya juga menginstal Rails 3.0.3.
Bagaimana cara saya script/generate migration
membuat tabel gabungan untuk suatu has_and_belongs_to_many
hubungan?
Aplikasi ini berjalan di Rails 2.3.2, tetapi saya juga menginstal Rails 3.0.3.
Dimana:
class Teacher < ActiveRecord::Base
has_and_belongs_to_many :students
end
dan
class Student < ActiveRecord::Base
has_and_belongs_to_many :teachers
end
untuk rel 4:
rails generate migration CreateJoinTableStudentTeacher student teacher
untuk rel 3:
rails generate migration students_teachers student_id:integer teacher_id:integer
untuk rel <3
script/generate migration students_teachers student_id:integer teacher_id:integer
(perhatikan nama tabel mencantumkan kedua tabel bergabung dalam urutan abjad)
dan kemudian hanya untuk rails 3 dan di bawahnya, Anda perlu mengedit migrasi yang Anda buat sehingga bidang id tidak dibuat:
create_table :students_teachers, :id => false do |t|
rails generate migration CreateJoinTableTeacherStudent teacher student
bukanrails generate migration CreateJoinTableStudentTeacher student teacher
, adalah bahwa sama? Apakah S (Tudent) perlu sebelum T (guru)?Sebuah
has_and_belongs_to_many
meja harus sesuai format ini. Saya berasumsi dua model yang akan digabungkanhas_and_belongs_to_many
sudah ada di DB:apples
danoranges
:Jika Anda menggunakan
:unique => true
di indeks, maka Anda harus (di rails3) lolos:uniq => true
kehas_and_belongs_to_many
.Informasi lebih lanjut: Rails Docs
UPDATED 2010-12-13 Saya telah memperbaruinya untuk menghapus id dan cap waktu ... Pada dasarnya
MattDiPasquale
dannunopolonia
benar: Tidak boleh ada id dan tidak boleh ada cap waktu atau rel tidak akan memungkinkanhas_and_belongs_to_many
untuk bekerja.sumber
script/generate migration
...Anda harus menamai tabel dengan nama 2 model yang ingin Anda hubungkan berdasarkan urutan abjad dan meletakkan kedua id model di tabel. Kemudian hubungkan setiap model satu sama lain membuat asosiasi dalam model.
Berikut contohnya:
Tetapi ini tidak terlalu fleksibel dan Anda harus berpikir untuk menggunakan has_many: through
sumber
Jawaban teratas menunjukkan indeks komposit yang saya tidak percaya akan digunakan untuk mencari apel dari jeruk.
Saya menemukan jawaban yang didasarkan pada 'The Doctor What' berguna dan diskusi yang pasti juga.
sumber
Di rel 4, Anda dapat menggunakan dengan mudah
create_join_table: table1s,: table2s
itu semua.
Perhatian: Anda harus keluar dari tabel1, tabel2 dengan alfanumerik.
sumber
Saya suka melakukan:
rails g migration CreateJoinedTable model1:references model2:references
. Dengan cara itu saya mendapatkan migrasi yang terlihat seperti ini:Saya suka memiliki indeks pada kolom ini karena saya akan sering melakukan pencarian menggunakan kolom ini.
sumber
add_foreign_key
akan gagal jika ditempatkan dalam migrasi yang sama seperti yang membuat tabel.