foreigner - remove foreign key

こ雲淡風輕ζ 提交于 2019-12-03 14:46:35

问题


I am trying to use mailboxer in my rails 4 app. 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 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"

I tried to rake db:migrate:down the original migration that created mailboxer, but also got an error saying 'command not found'.

Can anyone help? Thank you.


回答1:


The add_foreign_key command in your schema gave your foreign key the name 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. So your remove_foreign_key command must specify the existing foreign key name instead of the column name. Try:

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

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




回答3:


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. 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))


来源:https://stackoverflow.com/questions/23718292/foreigner-remove-foreign-key

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!