Rails has_and_belongs_to_many migration
J'ai deux modèles restaurant
et user
que je veux faire une relation has_and_belongs_to_many.
J'ai déjà allé dans les fichiers de modèle et a ajouté l' has_and_belongs_to_many :restaurants
et has_and_belongs_to_many :users
Je suppose, à ce point, je devrais être capable de faire quelque chose comme avec Rails 3:
rails generate migration ....
mais tout ce que j'ai essayé semble échouer. Je suis sûr que c'est quelque chose de vraiment simple, je suis nouveau sur les rails, donc je suis encore en apprentissage.
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin pour ajouter une table de jointure séparée avec seulement un
restaurant_id
etuser_id
(pas de clé primaire), dans ordre alphabétique.La première exécution de vos migrations, puis éditer le générés fichier de migration.
Rails 3
Rails 4:
Rails 5
De la docs:
Votre fichier de migration (note de l'
:id => false
; c'est ce qui empêche la création d'une clé primaire):Rails 3
Rails 4
t.belongs_to
va créer automatiquement les indices nécessaires.def change
va détecter automatiquement un avant ou la restauration de la migration, pas besoin de up/down.Rails 5
Remarque: Il existe également une option pour un nom de table personnalisé qui peut être passé en paramètre à create_join_table appelé
table_name
. À partir de la docsrestaurant_id
. La deuxième va vous aider si vous êtes à la recherche suruser_id
. Si vous êtes à la recherche sur les deux, je pense que la base de données serait assez intelligent pour seulement besoin d'une. Donc je suppose que le second n'a pas vraiment besoin d'être aggravée. Ce n'était plus juste un exemple. C'était un Rails de question, cependant, de sorte que l'affichage dans la DB section donnerait une réponse plus complète.rails g migration create_restaurants_users
sans table à la fin.create_join_table
peut être utilisé au moins dans les Rails >= 4.2Les réponses ici sont assez daté. Comme des Rails 4.0.2, votre migrations de faire usage de
create_join_table
.Pour créer la migration, exécutez:
Cela va générer le suivant:
Si vous voulez indexer ces colonnes, décommentez les lignes concernées et vous êtes bon pour aller!
unique: true
à elle. Cela permettra d'éviter de dupliquer la création de relations.Lors de la création de la table de jointure, en faisant attention à la condition que les deux tables doivent être répertoriés dans ordre alphabétique dans le nom de la migration/classe. Cela peut facilement vous mordre si votre modèle de noms sont similaires, par exemple, "abc" et "abb". Si vous deviez exécuter
Vos relations pas fonctionner comme prévu. Vous devez utiliser
à la place.
Pour les relations HABTM, vous devez créer une table de jointure. Il y est seulement de rejoindre la table et que le tableau ne devrait pas avoir une colonne d'id. Essayez cette migration.
Vous devez vérifier cette relation rails de guide tutoriels