0

J'utilise Rails 5 et PostGres 9.4. J'ai deux colonnes dans ma table qui référenceront une autre table. L'autre table s'appelle "encrypted_fields". Je voudrais nommer mes colonnes "enc_field1_encrypted_field_id" et "enc_field2_encrypted_field_id". J'ai essayé cette migrationComment créer une migration avec deux colonnes faisant référence à la même table?

class MySecureInfo < ActiveRecord::Migration[5.0] 
    def change 
    create_table :secure_accounts do |t| 
     t.references :encrypted_field, :enc_field1_encrypted_field_id, index: true, foreign_key: true 
     t.references :encrypted_field, :enc_field2_encrypted_field_id, index: true, foreign_key: true 
    end 
    end 
end 

mais il explose avec l'erreur ci-dessous

PG::UndefinedTable: ERROR: relation "enc_field1s" does not exist 

Comment puis-je régler ma migration pour éviter l'erreur?

+0

On dirait que vous avez une faute de frappe ('encryptd_field')? Peut-être pas votre problème, mais sauté. – jvillian

+0

Bon appel. J'ai corrigé la faute de frappe mais l'erreur reste. – Dave

+0

Je ne vois pas le point. Le type de colonne références est utilisé pour lier un modèle à un autre. Cela ne sert à rien de faire deux fois ça. 'enc_field1_encrypted_field_id' et' enc_field2_encrypted_field_id' conserveront la même clé de l'enregistrement de l'autre table 'encrypted_field'. Pouvez-vous développer un peu ici – Maxence

Répondre

0

Cela devrait fonctionner dans Rails 5 et suivantes:

class MySecureInfo < ActiveRecord::Migration[5.0] 
    def change 
    create_table :secure_accounts do |t| 
     t.references :enc_field1_encrypted_field, index: true, foreign_key: { to_table: :encrypted_fields } 
     t.references :enc_field2_encrypted_field, index: true, foreign_key: { to_table: :encrypted_fields } 
    end 
    end 
end