web-dev-qa-db-ja.com

外国人-外部キーを削除する

Rails 4アプリでメールボックスを使用しようとしています。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」、「conversations」、名前:「notifications_on_conversation_id」が含まれます。

メールボックスを作成した元の移行をdb:migrate:downに変換しようとしましたが、「コマンドが見つかりません」というエラーが発生しました。

誰でも助けることができますか?ありがとうございました。

22
Mel

add_foreign_keyコマンドでスキーマの外部キーにnotifications_on_conversation_id。この名前は、外国人が通常列名に基づいて割り当てるデフォルト名であるnotifications_conversation_id_fk。だからあなたのremove_foreign_keyコマンドは、列名の代わりに既存の外部キー名を指定する必要があります。試してください:

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

29
Dorian

私が得たものを実行したとき:

 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))
0
CodingBingo