¿Cómo hago script/generate migration
para crear una tabla de unión para una has_and_belongs_to_many
relación?
La aplicación se ejecuta en Rails 2.3.2, pero también tengo instalado Rails 3.0.3.
¿Cómo hago script/generate migration
para crear una tabla de unión para una has_and_belongs_to_many
relación?
La aplicación se ejecuta en Rails 2.3.2, pero también tengo instalado Rails 3.0.3.
Dónde:
class Teacher < ActiveRecord::Base
has_and_belongs_to_many :students
end
y
class Student < ActiveRecord::Base
has_and_belongs_to_many :teachers
end
para carriles 4:
rails generate migration CreateJoinTableStudentTeacher student teacher
para rieles 3:
rails generate migration students_teachers student_id:integer teacher_id:integer
para rieles <3
script/generate migration students_teachers student_id:integer teacher_id:integer
(tenga en cuenta que el nombre de la tabla enumera ambas tablas de unión en orden alfabético)
y luego solo para los rieles 3 e inferiores, debe editar su migración generada para que no se cree un campo de identificación:
create_table :students_teachers, :id => false do |t|
rails generate migration CreateJoinTableTeacherStudent teacher student
lugar derails generate migration CreateJoinTableStudentTeacher student teacher
, ¿es lo mismo? ¿S (tudent) necesita antes que T (eacher)?Una
has_and_belongs_to_many
tabla debe coincidir con este formato. Supongo que los dos modelos a los que se uniránhas_and_belongs_to_many
ya están en la base de datos:apples
yoranges
:Si usa el
:unique => true
en el índice, entonces debería (en rails3) pasar:uniq => true
ahas_and_belongs_to_many
.Más información: Rails Docs
ACTUALIZADO 2010-12-13 Lo actualicé para eliminar la identificación y las marcas de tiempo ... Básicamente
MattDiPasquale
ynunopolonia
son correctas: no debe haber una identificación y no debe haber marcas de tiempo o los rieles no permitiránhas_and_belongs_to_many
trabajar.fuente
script/generate migration
...Debe asignar a la tabla los nombres de los 2 modelos que desea conectar por orden alfabético y colocar los dos identificadores de modelo en la tabla. Luego, conecte cada modelo entre sí creando las asociaciones en el modelo.
Aquí hay un ejemplo:
Pero esto no es muy flexible y debería pensar en usar has_many: through
fuente
La respuesta principal muestra un índice compuesto que no creo que se utilizará para buscar manzanas de naranjas.
Encontré que la respuesta en la que se basa 'The Doctor What' es útil y la discusión también lo es.
fuente
En los rieles 4, puede usar de manera simple
create_join_table: table1s,: table2s
esto es todo.
Precaución: debe ofrecerford table1, table2 con alfanumérico.
fuente
Me gusta hacer:
rails g migration CreateJoinedTable model1:references model2:references
. De esa manera obtengo una migración que se ve así:Me gusta tener índice en estas columnas porque a menudo haré búsquedas usando estas columnas.
fuente
add_foreign_key
fallará si se coloca en la misma migración que la que creó las tablas.