【发布时间】:2019-08-26 09:38:43
【问题描述】:
前言
我知道我可以创建一个新的迁移,但我想知道是否可以以这种方式编辑现有的迁移。这只是我学习 Rails 并尝试新事物的过程。此代码没有生产版本运行。
问题
我试图让我的架构中的series 表包含对books 的引用,但它不起作用。
初始设置
rails db:migrate:status 让我处于这种状态:
Status Migration ID Migration Name
--------------------------------------------------
up 20190330155354 Create articles
up 20190401004837 Create comments
up 20190402231737 Create books
up 20190402233013 Create pages
up 20190403221445 Create series
我的文件20190402231737_create_books.rb 看起来像这样:
class CreateBooks < ActiveRecord::Migration[5.2]
def change
create_table :books do |t|
t.integer :series_number
t.integer :year_published
t.timestamps
end
end
end
采取的步骤
首先我回滚到我想编辑的迁移(我必须运行以下命令 3 次 - 指定版本号似乎不起作用,我不知道为什么):
rails db:rollback
现在rails db:migrate:status 让我处于这种状态:
Status Migration ID Migration Name
--------------------------------------------------
up 20190330155354 Create articles
up 20190401004837 Create comments
down 20190402231737 Create books
down 20190402233013 Create pages
down 20190403221445 Create series
我在书籍迁移中添加了这一行:
t.references :series, foreign_key: true
然后我运行迁移:
rails db:migrate
预期结果
我想要是用这个来生成我的架构:
create_table "series", force: :cascade do |t|
t.string "title"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["series_id"], name: "index_books_on_series_id"
end
实际结果
t.index ["series_id"], name: "index_books_on_series_id" 行永远不会添加到架构中。
【问题讨论】:
-
为什么不创建新的迁移?
-
我知道我可以创建一个新的迁移,但我想知道是否可以通过这种方式编辑现有的迁移。这只是我学习 Rails 并尝试新事物的过程。没有运行此代码的生产版本。
标签: ruby-on-rails ruby activerecord ruby-on-rails-5 ruby-on-rails-5.2