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

时间:2009-09-20 17:52:04

标签: 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

1 个答案:

答案 0 :(得分: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