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

Ruby on Rails database migration not creating foreign keys in MySQL tables(Ruby on Rails 数据库迁移不在 MySQL 表中创建外键)
本文介绍了Ruby on Rails 数据库迁移不在 MySQL 表中创建外键的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am trying to modify a database Migration in a Ruby on Rails application. I am using MySQL as my database and would like to add foreign keys to the table that is being created. I am using the following code and while the specifications for creating null values on appropriate columns is being followed no foreign key constraints are being applied.

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宝石.

然后将您的迁移更改为:

Then change your migration to this:

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

这篇关于Ruby on Rails 数据库迁移不在 MySQL 表中创建外键的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Hibernate reactive No Vert.x context active in aws rds(AWS RDS中的休眠反应性非Vert.x上下文处于活动状态)
Bulk insert with mysql2 and NodeJs throws 500(使用mysql2和NodeJS的大容量插入抛出500)
Flask + PyMySQL giving error no attribute #39;settimeout#39;(FlASK+PyMySQL给出错误,没有属性#39;setTimeout#39;)
auto_increment column for a group of rows?(一组行的AUTO_INCREMENT列?)
Sort by ID DESC(按ID代码排序)
SQL/MySQL: split a quantity value into multiple rows by date(SQL/MySQL:按日期将数量值拆分为多行)