繁体   English   中英

由于errno而无法捆绑exec rake:db:rollback:150-外键约束格式错误

[英]Cannot bundle exec rake:db:rollback due to errno: 150 - Foreign key constraint is incorrectly formed

我是Rails的新手,我不明白为什么会收到此错误。

我的rails应用程序中有一个教学模型,并且我想使用rails destroy model teaches删除此模型。 但是,当我运行bundle exec rake db:rollback ,我一直收到此错误

Mysql2::Error: Error on rename of './CrimeEducApp_development/#sql-ca1_27' to './CrimeEducApp_development/teaches' (errno: 150 - Foreign key constraint is incorrectly formed): ALTER TABLE teaches DROP PRIMARY KEY;

该示教模型没有任何使用其属性作为外键的表,但是该示教模型确实具有引用其他表的属性。

模型文件

require 'composite_primary_keys'

class Teach < ApplicationRecord
  self.primary_key = :course_id, :certification_number
  belongs_to :course, class_name: "Course", foreign_key: "course_id"
  belongs_to :worker, class_name: "Worker", foreign_key: "certification_number"
end

迁移档案

class CreateTeaches < ActiveRecord::Migration[5.0]
  def up
    create_table :teaches , {:id => false} do |t|
      t.integer :course_id
      t.integer :certification_number

      t.timestamps
    end
    execute "ALTER TABLE teaches ADD PRIMARY KEY(course_id, certification_number);"
    execute "ALTER TABLE teaches ADD CONSTRAINT teaches_references_course FOREIGN KEY (course_id) REFERENCES courses(course_id) ON DELETE CASCADE ON UPDATE CASCADE;"
    execute "ALTER TABLE teaches ADD CONSTRAINT teaches_references_worker FOREIGN KEY (certification_number) REFERENCES workers(certification_number) ON DELETE CASCADE ON UPDATE CASCADE;"
  end

  def down
    execute "ALTER TABLE teaches DROP PRIMARY KEY;"
    execute "ALTER TABLE teaches DROP FOREIGN KEY teaches_references_course;"
    execute "ALTER TABLE teaches DROP FOREIGN KEY teaches_references_worker;"
    drop_table :teaches
  end
end

我可能引用的属性有误吗?

显然,删除主键必须在最后一个execute语句之后(如果不是)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM