иностранец - удалить внешний ключ
Я пытаюсь использовать почтовый ящик в своем приложении 4 rails. Проблема возникает, когда я пытаюсь развернуть db. Ошибка возникает при создании таблицы цепочек почтовых ящиков, которая имеет зависимости в таблице уведомлений.
Я пытаюсь удалить внешний ключ для уведомлений.
Я создал миграцию, в которой говорится:
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"
Я попытался использовать rab db: migrate: вниз по исходной миграции, которая создала почтовый ящик, но также получила сообщение об ошибке "команда не найдена".
Может ли кто-нибудь помочь? Спасибо.
Ответы
Ответ 1
Команда add_foreign_key
в вашей схеме дала вашему внешнему ключу имя notifications_on_conversation_id
. Это имя отличается от имени по умолчанию, которое иностранец обычно назначал на основе имени столбца, которое is notifications_conversation_id_fk
. Поэтому ваша команда remove_foreign_key
должна указывать существующее имя внешнего ключа вместо имени столбца. Пытаться:
remove_foreign_key :notifications, name: "notifications_on_conversation_id"
Ответ 2
# 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#method-i-remove_foreign_key
Ответ 3
Когда я побежал, я получил:
NoMethodError: undefined method 'remove_foreign_key' for #<ActiveRecord::ConnectionAdapters::Table:0x00007faa35e94aa8>
Did you mean? remove_index
Слова wisdom- никогда не используют ничего, кроме целого числа id для внешнего ключа. Я использовал параметр title во время практики над поддельным приложением, и это вызывает:
ActiveRecord::AssociationTypeMismatch (Company(#70210936585940) expected, got "Company4" which is an instance of String(#70210933923380))