2014-05-18 19 views
11

Sto tentando di utilizzare il mailboxer nella mia app per rails 4. Un problema si presenta quando provo a distribuire il db. L'errore si verifica durante la creazione della tabella delle conversazioni del server di posta, che ha dipendenze nella tabella delle notifiche.straniero: rimuovere la chiave esterna

Sto cercando di rimuovere la chiave esterna per le conversazioni di notifiche.

ho creato una migrazione che dice:

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

Tuttavia, il rastrello interrompe e dice una chiave esterna non esiste.

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 

mio schema include: add_foreign_key "Notifiche", "conversazioni", nome: "notifications_on_conversation_id"

ho cercato di rake db: la migrazione: giù la migrazione originale che ha creato mailboxer, ma anche ottenuto un errore che dice "comando non trovato".

Qualcuno può aiutare? Grazie.

+0

Rimuovere manualmente l'ultima migrazione creato che mostra l'errore e si protende rn 'rake db: rollback' per tornare alla penultima migrazione. –

+0

ho molte migrazioni che sono state create da questa migrazione. Ho provato a migrare: giù usando il riferimento timestamp ma il comando non è riuscito. – Mel

+0

l'errore 'chiave estranea non esiste' potrebbe essere dovuto al fatto che potresti non aver definito relazioni tra modelli all'interno dei modelli .. –

risposta

15

Il comando add_foreign_key nello schema ha assegnato alla chiave esterna il nome notifications_on_conversation_id. Questo nome è diverso dal nome predefinito che lo straniero normalmente assegna in base al nome della colonna, ovvero notifications_conversation_id_fk. Quindi il tuo comando remove_foreign_key deve specificare il nome della chiave esterna esistente al posto del nome della colonna. Prova:

remove_foreign_key :notifications, name: "notifications_on_conversation_id" 
+0

Grazie mille. Ho finito per abbandonare il mio DB e ricrearlo - dopo che avevo commentato gli attributi delle chiavi esterne nelle migrazioni del mailboxet. Non sarò in grado di usare questo consiglio questa volta, ma sembra che sia probabilmente il trucco - se gli altri hanno lo stesso problema. Grazie. – 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 

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