web-dev-qa-db-fra.com

Générer la migration - créer une table de jointure

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?

62
gotqn

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.

37
Powers

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.)

153
andrewcockerham

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
20
Prakash Raman

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
0
Cody Elhard