2014-05-18 23 views
11

Ich versuche, Mailbox in meiner Rails 4 App zu verwenden. Ein Problem tritt auf, wenn ich versuche, die Datenbank bereitzustellen. Der Fehler tritt beim Erstellen der Exchange-Konversationstabelle auf, die über Abhängigkeiten in der Benachrichtigungstabelle verfügt.Ausländer - Fremdschlüssel entfernen

Ich versuche, den Fremdschlüssel für Benachrichtigungskonversationen zu entfernen.

habe ich eine Migration, die sagt:

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

jedoch der Rake abgebrochen und sagt ein Fremdschlüssel existiert nicht.

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 

Mein Schema enthält: add_foreign_key "Benachrichtigungen", "Gespräche", name: "notifications_on_conversation_id"

Ich versuchte db zu rechen: Migration: auf der ursprünglichen Migration, die mailboxer geschaffen, sondern bekam auch ein Fehler, der 'Befehl nicht gefunden' sagt.

Kann jemand helfen? Vielen Dank.

+0

manuell entfernen Sie die letzte Migration erstellt, die den Fehler zeigt und juts rn 'rake db: rollback' auf die zweite letzten Migration zurückzukehren. –

+0

Ich habe viele Migrationen, die seit dieser Migration erstellt wurden. Ich habe versucht zu migrieren: Nach unten mit der Zeitstempel-Referenz, aber der Befehl ist fehlgeschlagen. – Mel

+0

"Fremdschlüssel existiert nicht" Fehler kann sein, weil Sie möglicherweise keine Modellbeziehungen innerhalb der Modelle definiert haben .. –

Antwort

15

Der Befehl add_foreign_key in Ihrem Schema gab Ihrem Fremdschlüssel den Namen notifications_on_conversation_id. Dieser Name unterscheidet sich von dem Standardnamen, den der Ausländer normalerweise anhand des Spaltennamens zuweisen würde. Dies ist notifications_conversation_id_fk. Ihr remove_foreign_key-Befehl muss also den vorhandenen fremden Schlüsselname statt des Spaltennamens angeben. Versuchen:

remove_foreign_key :notifications, name: "notifications_on_conversation_id" 
+0

Vielen Dank. Am Ende habe ich meine Datenbank gelöscht und neu erstellt, nachdem ich die Fremdschlüsselattribute in den Mailbox-Migrationen auskommentiert hatte. Ich werde diesen Rat diesmal nicht verwenden können, aber es sieht so aus, als wäre es der Trick - wenn andere das gleiche Problem haben. Vielen Dank. – Mel

15
# 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 

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