我有以下表格:
Route和Stop中的ID在我的Mysql-DB中的类型为BIGINT(20)。迁移失败,因为使用此:
class CreateMappings < ActiveRecord::Migration
def change
create_table :mappings do |t|
t.references :route, index: true, foreign_key: true
t.references :stop, index: true, foreign_key: true
t.timestamps null: false
end
end
end
使用route_id和stop_id创建表映射,但数据类型为INT(11)。这与BIGINT(20)不兼容。我怎样才能解决这个问题?有任何想法吗?外键的创建失败。
错误消息
这是rake db:migrate --trace
输出的一部分:
**调用db:migrate(first_time) **调用环境(first_time) **执行环境 **调用db:load_config(first_time) **执行db:load_config **执行db:migrate == 20151227194101 CreateMappings:迁移=================================== - create_table(:mappings)rake aborted! StandardError:发生错误,所有以后的迁移都被取消:
Mysql2 ::错误:无法添加外键约束:ALTER TABLE
mappings
添加约束fk_rails_1b9f715271
外键 (route_id
)参考routes
(id
)
当我尝试使用MySql-Client执行上述SQL语句(ALTER TABLE mappings
...)时,出现此错误:
Failed to add the foreign key constaint. MIssing index for constraint 'fk_rails_1b9f715271' in the referenced table 'routes'.
答案 0 :(得分:5)
references
方法如果您不希望添加的列为整数,则采用类型选项,例如
t.references :route, type: :bigint, index: true, foreign_key: true
答案 1 :(得分:0)
你试过这个表格吗?
class CreateMappings < ActiveRecord::Migration
def change
create_table :mappings do |t|
t.references :route
t.references :stop
t.timestamps null: false
end
end
add_index(:mappings, :route)
add_index(:mappings, :stop)
end