J'ai consulté plusieurs SO
et google
pour générer une migration de la table de jointure pour has many and belongs to many
association et rien ne fonctionne.
Toutes les solutions génèrent un fichier de migration vide.
J'utilise Rails 3.2.13
et j'ai deux tables: security_users
et assignments
. Voici quelques-unes des choses que j'ai essayées:
Rails generate migration assignments_security_users
Rails generate migration create_assignments_security_users
Rails generate migration create_assignments_security_users_join_table
Rails g migration create_join_table :products, :categories (following the official documentation)
Rails generate migration security_users_assignments security_user:belongs_to assignments:belongs_to
Quelqu'un peut-il dire comment créer une migration de table de jointure entre deux tables?
Exécutez cette commande pour générer le fichier de migration vide (il n'est pas rempli automatiquement, vous devez le remplir vous-même):
Rails generate migration assignments_security_users
Ouvrez le fichier de migration généré et ajoutez ce code:
class AssignmentsSecurityUsers < ActiveRecord::Migration
def change
create_table :assignments_security_users, :id => false do |t|
t.integer :assignment_id
t.integer :security_user_id
end
end
end
Puis lancez rake db:migrate
depuis votre terminal. J'ai créé un quiz sur plusieurs relations avec un exemple simple qui pourrait vous aider.
Pour remplir automatiquement la commande create_join_table dans la ligne de commande, elle devrait ressembler à ceci:
Rails g migration CreateJoinTableProductsSuppliers products suppliers
Pour un modèle de produit et un modèle de fournisseur. Rails créera un tableau intitulé "produits_suppliers". Notez la pluralisation.
(Remarque: la commande generation
peut être réduite à seulement g
.)
J'aime généralement avoir le fichier "modèle" également lorsque je crée la table de jointure. Donc je le fais.
Rails g model AssignmentSecurityUser assignments_security:references user:references
Je crois que ce serait une réponse mise à jour pour Rails 5
create_table :join_table_name do |t|
t.references :table_name, foreign_key: true
t.references :other_table_name, foreign_key: true
end