[英]foreigner - remove foreign key
I am trying to use mailboxer in my rails 4 app. 我想在我的rails 4 app中使用mailboxer。 A problem is arising when i try to deploy the db.
当我尝试部署数据库时出现问题。 The error occurs in creating the mailboxer conversations table, which has dependencies in notifications table.
创建邮箱会话表时出错,该表在通知表中具有依赖关系。
I am trying to remove the foreign key for notifications conversations. 我正在尝试删除通知对话的外键。
I created a migration which says: 我创建了一个迁移说:
change_table :notifications do |t|
t.remove_foreign_key :conversations
However, the rake aborts and says a foreign key does not exist. 但是,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
My schema includes: add_foreign_key "notifications", "conversations", name: "notifications_on_conversation_id" 我的架构包括:add_foreign_key“notifications”,“conversation”,name:“notifications_on_conversation_id”
I tried to rake db:migrate:down the original migration that created mailboxer, but also got an error saying 'command not found'. 我试图挖掘db:migrate:down创建邮箱的原始迁移,但也收到错误,说'找不到命令'。
Can anyone help? 有人可以帮忙吗? Thank you.
谢谢。
The add_foreign_key
command in your schema gave your foreign key the name notifications_on_conversation_id
. 架构中的
add_foreign_key
命令为外键提供了名称notifications_on_conversation_id
。 This name is different than the default name that foreigner would normally assign based on the column name, which is notifications_conversation_id_fk
. 此名称与外国人通常根据列名称分配的默认名称不同,后者是
notifications_conversation_id_fk
。 So your remove_foreign_key
command must specify the existing foreign key name instead of the column name. 因此,您的
remove_foreign_key
命令必须指定现有的外键名称而不是列名称。 Try: 尝试:
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
Offical doc: http://api.rubyonrails.org/v4.2/classes/ActiveRecord/ConnectionAdapters/SchemaStatements.html#method-i-remove_foreign_key 官方文件: http : //api.rubyonrails.org/v4.2/classes/ActiveRecord/ConnectionAdapters/SchemaStatements.html#method-i-remove_foreign_key
When I ran that I got: 我跑的时候得到了:
NoMethodError: undefined method `remove_foreign_key' for #<ActiveRecord::ConnectionAdapters::Table:0x00007faa35e94aa8>
Did you mean? remove_index
Words of wisdom- never use anything except an id integer for a foreign key. 智慧的话 - 除了外键的id整数之外,永远不要使用任何东西。 I used a title param while practicing on a fake app and it causes:
我在假应用程序上练习时使用了标题参数,它导致:
ActiveRecord::AssociationTypeMismatch (Company(#70210936585940) expected, got "Company4" which is an instance of String(#70210933923380))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.