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

3

我正在尝试修改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
1个回答

6
你可以使用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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接