2017-09-26 1 views
0

Je veux définir la clé étrangère pour une migration de modèle à l'aide d'une colonne existante, je veux mettre codproducto comme clé étrangère d'une table appelée invmtoproducto, voici ma nouvelle migration de modèle:comment définir la référence sur la migration avec un rail de colonne existant?

class CreateDetalleinveacs < ActiveRecord::Migration[5.1] 
    def change 
    create_table :detalleinveacs do |t| 
     t.integer :correlativo 
     t.integer :cantidad 
     t.decimal :valor, precision: 20, scale: 10 
     t.decimal :costo, precision: 30, scale: 20 
     t.string :nis 
     t.datetime :feacceso 
     t.integer :codproducto 
     t.integer :idinveac 
    end 
    end 
end 

Répondre

0

Vous pouvez utiliser

add_foreign_key :detalleinveacs, :invmtoproducto, column: :codproducto 

migration doit ressembler à ceci:

class CreateDetalleinveacs < ActiveRecord::Migration[5.1] 
    def change 
    create_table :detalleinveacs do |t| 
     t.integer :correlativo 
     t.integer :cantidad 
     t.decimal :valor, precision: 20, scale: 10 
     t.decimal :costo, precision: 30, scale: 20 
     t.string :nis 
     t.datetime :feacceso 
     t.integer :codproducto 
     t.integer :idinveac 
    end 

    # Add a foreign key constraint 
    # from the 'detalleinveacs' table 
    # to the 'invmtoproducto' table 
    # where the foreign key column 'codproducto' of the 'detalleinveacs' table 
    # references the 'id' column of the 'invmtoproducto' table. 
    add_foreign_key :detalleinveacs, :invmtoproducto, column: :codproducto 
    end 
end 

Si les références clés étrangères une autre colonne de id sur la table invmtoproducto, il est possible de remplacer cette valeur par défaut:

add_foreign_key :detalleinveacs, 
       :invmtoproducto, 
       column: :codproducto, 
       primary_key: :some_column_other_than_id 

S'il vous plaît voir le documentation pour plus de détails

+0

Je ne suis pas sûr d'où dois-je ajouter, j'essaie en dehors du bloc de create table mais ne fonctionne pas, est-ce une commande spécifique ou il devrait être dans la migration? – AlexQuezada

+0

@AlexQuezada J'ai élaboré sur les possibilités. En particulier, j'ai ajouté l'option pour spécifier une clé primaire autre que id, car vos tables pourraient ne pas suivre les conventions de dénomination par défaut. Si cela ne suffit pas, veuillez indiquer l'erreur afin que je puisse vous donner des conseils spécifiques. – ulferts

+0

merci, ça a marché! J'ai eu une erreur parce que sur la table invmtoproducto la contrainte n'était pas définie, mais une fois que j'ai réparé cela a fonctionné comme un charme! – AlexQuezada