我正在尝试在我的rails 4 app中使用mailboxer。当我尝试部署数据库时出现问题。创建邮箱会话表时出错,该表在通知表中具有依赖关系。
我正在尝试删除通知对话的外键。
我创建了一个迁移说:
change_table :notifications do |t|
t.remove_foreign_key :conversations
然而,rake中止并说外键不存在。
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:down创建邮箱的原始迁移,但也收到错误,说找不到'命令'。
有人可以帮忙吗?谢谢。
答案 0 :(得分:27)
# 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
答案 1 :(得分:26)
架构中的add_foreign_key
命令为外键指定了名称notifications_on_conversation_id
。此名称与外国人通常根据列名称notifications_conversation_id_fk
分配的默认名称不同。因此,您的remove_foreign_key
命令必须指定现有的外键名称而不是列名称。尝试:
remove_foreign_key :notifications, name: "notifications_on_conversation_id"
答案 2 :(得分:0)
当我跑步时我得到了:
NoMethodError: undefined method `remove_foreign_key' for #<ActiveRecord::ConnectionAdapters::Table:0x00007faa35e94aa8>
Did you mean? remove_index
智慧的话语-切勿将ID整数用作外键。我在假冒应用程序上练习时使用了标题参数,它导致:
ActiveRecord::AssociationTypeMismatch (Company(#70210936585940) expected, got "Company4" which is an instance of String(#70210933923380))