mysql - 在 ActiveRecord 迁移中添加外键时出错

标签 mysql ruby sinatra rake rails-migrations

我有以下 db/migrate ruby​​ 文件。当我尝试rake db:migrate时,它给出了错误。

class CreateEmployers < ActiveRecord::Migration
  def self.up
            create_table :employers, {:primary_key => 'emp_id'} do |t|
            t.column :emp_name, :string, :limit => 100, :null => false  #validate
            t.column :company_id, :int, :null => false
            t.column :location, :string, :limit => 200, :null => false  #validate
            t.column :registered_date, :datetime
            t.column :is_verified, :boolean, :default => false, :null => false
            t.column :is_blacklisted, :boolean, :default => false, :null => false
            t.column :emp_grade, :string, :default => 'average', :null => false
            t.timestamps
                end
        end

        execute "ALTER TABLE `employers` 
  ADD CONSTRAINT `FK_EMPLOYERS_COMPANIES`
  FOREIGN KEY (`company_id` )
  REFERENCES `companies` (`company_id` )
  ON DELETE NO ACTION
  ON UPDATE NO ACTION;"

        def self.down
                drop_table :employers
        end
end

运行rake db:migrate时出现以下错误。如果我删除 execute 部分就可以了。

-- execute("ALTER TABLE `employers` \n  ADD CONSTRAINT `FK_EMPLOYERS_COMPANIES`\n  FOREIGN KEY (`company_id` )\n  REFERENCES `companies` (`company_id` )\n  ON DELETE NO ACTION\n  ON UPDATE NO ACTION;")
rake aborted!
An error has occurred, all later migrations canceled:

Mysql2::Error: Table 'test.employers' doesn't exist: ALTER TABLE `employers` 
  ADD CONSTRAINT `FK_EMPLOYERS_COMPANIES`
  FOREIGN KEY (`company_id` )
  REFERENCES `companies` (`company_id` )
  ON DELETE NO ACTION
  ON UPDATE NO ACTION;

Companies 表已创建,company_id 已设置为主键(int(11),不为空且自动递增)。

ruby版本是2.0.0p0,mysql版本是5.5.31

我做错了什么吗?

最佳答案

您需要将execute位移动到self.up

关于mysql - 在 ActiveRecord 迁移中添加外键时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16331763/

相关文章:

ruby - 模块化、基于组件的 Sinatra 应用程序的架构

php - 在单个表上组合 2 个 sql 语句

MySQL - 使用 PK 和 DELETE 时发生死锁错误

php mysql 查询资源 null 错误

ruby - 无法使用 OptionParser 和 rspec

ruby - 发送到服务器的 Unicode 字符作为垃圾返回

ruby - Heroku 应用程序无法启动 - `require' : no such file to load -- sinatratestapp (LoadError)

java - 使用java将日期时间插入数据库

ruby-on-rails - :as in rails routes. rb

ruby - 如何在 Ruby 中通过数组存储和检索哈希