Иностранец - удалить внешний ключ

Я пытаюсь использовать почтовый ящик в моем приложении rails 4. Проблема возникает, когда я пытаюсь развернуть базу данных. Ошибка возникает при создании таблицы разговоров почтового ящика, которая имеет зависимости в таблице уведомлений.

Я пытаюсь удалить внешний ключ для уведомлений разговоров.

Я создал миграцию, которая говорит:

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

Тем не менее, грабли прерывается и говорит, что внешний ключ не существует.

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

Моя схема включает в себя: add_foreign_key "уведомления", "разговоры", имя: "notifications_on_conversation_id"

Я попытался разгрести db:migrate: вниз по оригинальной миграции, которая создала почтовый ящик, но также получил ошибку, говорящую "команда не найдена".

Кто-нибудь может помочь? Спасибо.

2 ответа

Решение

add_foreign_key команда в вашей схеме дала вашему внешнему ключу имя notifications_on_conversation_id, Это имя отличается от имени по умолчанию, которое иностранец обычно назначает на основе имени столбца, которое notifications_conversation_id_fk, Так что ваши remove_foreign_key Команда должна указывать существующее имя внешнего ключа вместо имени столбца. Пытаться:

remove_foreign_key :notifications, name: "notifications_on_conversation_id"
# 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

Официальный документ: http://api.rubyonrails.org/v4.2/classes/ActiveRecord/ConnectionAdapters/SchemaStatements.html

Когда я побежал, я получил:

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

Слова мудрости - никогда не используйте ничего, кроме целого числа id для внешнего ключа. Я использовал параметр title во время тренировки с поддельным приложением, и это вызывает:

ActiveRecord::AssociationTypeMismatch (Company(#70210936585940) expected, got "Company4" which is an instance of String(#70210933923380))
Другие вопросы по тегам