web-dev-qa-db-fra.com

foreigner - enlève la clé étrangère

J'essaie d'utiliser mailboxer dans mon application Rails 4. Un problème se pose lorsque j'essaie de déployer la base de données. L'erreur se produit lors de la création de la table de conversations du gestionnaire de boîtes aux lettres, qui comporte des dépendances dans la table de notifications. 

J'essaie de supprimer la clé étrangère pour les conversations de notifications.

J'ai créé une migration qui dit:

change_table :notifications do |t|
t.remove_foreign_key :conversations

Cependant, le rake avorte et dit qu'une clé étrangère n'existe pas.

rake aborted!
An error has occurred, this and all later migrations canceled:

PG::UndefinedObject: ERROR:  constraint "notifications_conversation_id_fk" of relation      "notifications" does not exist

Mon schéma comprend: add_foreign_key "notifications", "conversations", nom: "notifications_on_conversation_id"

J'ai essayé de rake db: migrate: en bas de la migration originale qui a créé le gestionnaire de boîtes aux lettres, mais j'ai aussi une erreur qui dit "commande introuvable" 

Quelqu'un peut-il aider? Je vous remercie.

16
Mel

La commande add_foreign_key de votre schéma a attribué à votre clé étrangère le nom notifications_on_conversation_id. Ce nom est différent du nom par défaut que l'étranger attribuerait normalement en fonction du nom de la colonne, à savoir notifications_conversation_id_fk. Ainsi, votre commande remove_foreign_key doit spécifier le nom de la clé étrangère existante au lieu du nom de la colonne. Essayer:

remove_foreign_key :notifications, name: "notifications_on_conversation_id"
23
cschroed
# Removes the given foreign key from the table.
# Removes the foreign key on +accounts.branch_id+.
remove_foreign_key :accounts, :branches

# Removes the foreign key on +accounts.owner_id+.
remove_foreign_key :accounts, column: :owner_id

# Removes the foreign key named +special_fk_name+ on the +accounts+ table.
remove_foreign_key :accounts, name: :special_fk_name

Doc officiel: http://api.rubyonrails.org/v4.2/classes/ActiveRecord/ConnectionAdapters/SchemaStatements.html#method-i-remove_foreign_key

25
Dorian

Quand j'ai couru que j'ai eu:

 NoMethodError: undefined method `remove_foreign_key' for #<ActiveRecord::ConnectionAdapters::Table:0x00007faa35e94aa8>
Did you mean?  remove_index

Paroles de sagesse: n'utilisez jamais rien sauf un entier id pour une clé étrangère. J'ai utilisé un titre param en pratiquant sur une fausse application et cela provoque: 

ActiveRecord::AssociationTypeMismatch (Company(#70210936585940) expected, got "Company4" which is an instance of String(#70210933923380))
0
CodingBingo