Rails de migration pour has_and_belongs_to_many table de jointure
Comment dois-je faire un script/generate migration
pour créer une table de jointure pour un has_and_belongs_to_many
relation?
D'exécution de l'application sur les Rails 2.3.2, mais j'ai aussi des Rails 3.0.3 installé.
Vous devez vous connecter pour publier un commentaire.
Où:
et
pour les rails 4:
pour rails 3:
pour les rails < 3
(notez le nom de la table répertorie à la fois les tables de jointure dans l'ordre alphabétique)
et puis pour rails 3 et ci-dessous, vous devez modifier votre générés migration donc un champ id n'est pas créée:
rails generate migration CreateJoinTableTeacherStudent teacher student
au lieu derails generate migration CreateJoinTableStudentTeacher student teacher
, c'est que la même chose? Ne S(tudent) avant que T(eacher)?has_many :through
de déclarer plusieurs-à-plusieurs relations entre les modèles. mais je ne peux pas 🙁Rails 4.2.0
et fonctionne parfaitement.Un
has_and_belongs_to_many
tableau doit correspondre à ce format. Je suis en supposant que les deux modèles d'être rejoint parhas_and_belongs_to_many
sont déjà dans la base de données :apples
etoranges
:Si vous utilisez le
:unique => true
sur l'index, alors vous devriez (en rails3) passer:uniq => true
àhas_and_belongs_to_many
.Plus d'informations: Rails Docs
Mis à JOUR 2010-12-13 je l'ai mis à jour pour supprimer les id et les horodatages... en gros
MattDiPasquale
etnunopolonia
sont corrects: Il ne doit pas être un id et il ne doit pas être horodateurs ou des rails de ne pas permettrehas_and_belongs_to_many
de travail.script/generate migration
...Vous devriez nom de la table, les noms des 2 modèles vous voulez vous connecter par ordre alphabétique
et mettre les deux modèle de l'id dans la table.
Ensuite connecter chaque modèle à l'autre en créant des associations dans le modèle.
Voici un exemple:
Mais ce n'est pas très flexible et vous devriez penser à utiliser has_many :through
La réponse sommet, affiche un indice composite que je ne crois pas sera utilisé pour la recherche de pommes à des oranges.
J'ai trouvé la réponse c'est basé sur la par "Le Médecin Ce" utile et la discussion certainement trop.
Dans les rails 4, vous pouvez simplement utiliser
create_join_table :table1s, :table2s
c'est tout.
Attention: vous devez offord table1, table2 avec alphanumériques.
Que j'aime faire:
rails g migration CreateJoinedTable model1:references model2:references
. De cette façon, j'obtiens une migration qui ressemble à ceci:J'aime avoir de l'index sur ces colonnes car je vais souvent faire des recherches à l'aide de ces colonnes.
add_foreign_key
échouera si elle est placée dans la même migration comme celui qui a créé les tables.