【发布时间】:2015-05-01 20:40:23
【问题描述】:
背景
一个简单的 rails activerecord 迁移
class CreateMyTable < ActiveRecord::Migration
def change
create_table :my_table, force: :cascade do |t|
t.index "id"
t.string "column1", limit: 64
t.string "column2", limit: 64
t.timestamps null: false
end
MyTable.connection.execute("ALTER TABLE my_table AUTO_INCREMENT = 10000;")
end
end
它创建my_table 并向其中添加几列。最后一行执行一个原始命令,将第一个 id 设置为从 10000 开始计数。
问题
运行db:migrate 时,rails 会更新schema.rb 文件以合并此迁移的结果,即添加新表。
但是,设置 AUTO_INCREMENT 的最后一条语句不会在 schema.rb 文件中捕获。
当另一个用户或服务器第一次运行 db:setup 时,rails 将使用该 schema.rb 来构建架构,并且不会发现它需要将 id 提升到 10000 的事实。
有什么方法可以将此迁移更改到schema.rb 文件中,以便将来基于此schema.rb 文件构建的所有数据库都会适当地增加id?
编辑
根据 inye 下面的建议,我尝试编辑迁移以删除 t.index 引用,我的 schema.rb 如下
ActiveRecord::Schema.define(version: 20150501211519) do
create_table "my_table", force: :cascade do |t|
t.string "column1", limit: 64
t.string "column2", limit: 64
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
end
【问题讨论】:
标签: mysql ruby-on-rails activerecord