mysql - Ruby on Rails 数据库迁移不在 MySQL 表中创建外键

标签 mysql ruby-on-rails migration

我正在尝试在 Ruby on Rails 应用程序中修改数据库迁移。我正在使用 MySQL 作为我的数据库,并想将外键添加到正在创建的表中。我正在使用以下代码,虽然遵循在适当列上创建空值的规范,但未应用外键约束。

class CreateBookCheckOuts < ActiveRecord::Migration
  def self.up
    create_table :book_check_outs do |t|
      t.integer :book_id, :null => false, :options =>
        "CONSTRAINT fk_book_check_out_books REFERENCES books(id)"
      t.integer :person_id, :null => false, :options =>
        "CONSTRAINT fk_book_check_out_people REFERENCES people(id)"
      t.datetime :OutDate, :null => false
      t.datetime :ReturnDate, :null => true

      t.timestamps
    end
  end

  def self.down
    drop_table :book_check_outs
  end
end

最佳答案

您可以使用 Foreigner gem 。

然后将您的迁移更改为:

class CreateBookCheckOuts < ActiveRecord::Migration
  def self.up
    create_table :book_check_outs do |t|
      t.integer :book_id, :null => false
      t.integer :person_id, :null => false
      t.datetime :OutDate, :null => false
      t.datetime :ReturnDate, :null => true

      t.timestamps
    end
    add_foreign_key(:book_check_outs, :books)
    add_foreign_key(:book_check_outs, :people)
  end

  def self.down
    remove_foreign_key(:book_check_outs, :books)
    remove_foreign_key(:book_check_outs, :people)
    drop_table :book_check_outs
  end
end

关于mysql - Ruby on Rails 数据库迁移不在 MySQL 表中创建外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1451570/

相关文章:

mysql - 如何在mySQL中查询两天之间的日期字段

kubernetes - Kompose和Kuosenetes的区别

c++ - 无法在 VS2015 下启动 64 位应用程序

mysql - Deis 工作流支持非 12 因素服务

mySQL 将数字数据与同一张表中的最后一张图像组合在一起

ruby-on-rails - 选择查询heroku数据库

javascript - 如何在 rails 的文件( xyz.js.erb )中调用 java 脚本函数?

azure - 有没有办法将团队项目及其工作项从 VSTS (Azure DevOps) 实例导出到本地 TFS 2018 Server 实例?

mysql - 如何在mysql 5.5.x中将character_set_client更新为utf8mb4

ruby-on-rails - 如何在 Gemfile 中安装生产组