【发布时间】:2016-12-22 18:14:05
【问题描述】:
我创建了一个包含以下内容的迁移文件.. 它适用于 SQLite,但当我切换到 MySQL 时,出现“无法创建表”错误(见下文)。
class CreateVisits < ActiveRecord::Migration[5.0]
def change
create_table :visits, :primary_key => :id do |t|
t.references :user, foreign_key: true
t.references :visitor, foreign_key: "User"
t.timestamps
end
add_index :visits, [:user_id, :visitor_id], unique: true
end
end
MySQL 抛出错误:
Mysql2::Error: Can't create table 'myapp_development.visits' (errno: 150):
CREATE TABLE `visits` (
`id` int AUTO_INCREMENT PRIMARY KEY,
`user_id` int,
`visitor_id` int,
`created_at` datetime NOT NULL,
`updated_at` datetime NOT NULL,
INDEX `index_visits_on_user_id` (`user_id`),
INDEX `index_visits_on_visitor_id` (`visitor_id`),
CONSTRAINT `fk_rails_09e5e7c20b`
FOREIGN KEY (`user_id`)
REFERENCES `users` (`id`),
CONSTRAINT `fk_rails_b156c396f4`
FOREIGN KEY (`visitor_id`)
REFERENCES `visitors` (`id`)
)
ENGINE=InnoDB
欢迎提出想法!
【问题讨论】:
-
在创建
visits表之前,您是否创建了users表和visitors表? -
users 表之前已创建。访问表包含 2 列:user_id 和 visitor_id,它们都与用户表中的 1 条记录相关
-
visitors表怎么样?这看起来像 mysql 正在尝试创建引用,但找不到它试图引用的表之一 -
没有visitors表。
-
您的提示很好,我已将引用更改为整数并且它有效。谢谢!
标签: mysql ruby-on-rails activerecord rails-migrations