铁轨毁坏脚手架留下后桌

时间:2014-01-31 18:50:41

标签: ruby-on-rails ruby ruby-on-rails-3 schema scaffold

我使用命令创建了一个新的脚手架:

rails generate scaffold level

然后我用命令

摧毁了它
rails destroy scaffold level

然后再使用命令

将其添加回来
rails generate scaffold level question:string answer:string prev_q:integer next_q:integer

但是现在当我尝试rake db:migrate时,我收到以下错误

 SQLite3::SQLException: table "levels" already exists: CREATE TABLE "levels" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "question" varchar(255), "answer" varchar(255), "prev_q" integer, "next_q" integer, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL)

我的migrate / create_level.rb是

class CreateLevels < ActiveRecord::Migration
def change
  create_table :levels do |t|
  t.string :question
  t.string :answer
  t.integer :prev_q
  t.integer :next_q

  t.timestamps
  end
 end
end

但我的schema.rb是:

  create_table "levels", :force => true do |t|
    t.datetime "created_at", :null => false
    t.datetime "updated_at", :null => false
  end

我想知道如何更新架构中的级别表。另外我想知道为什么在我销毁脚手架时表不会被删除。我是否需要运行另一个命令来执行此操作?

2 个答案:

答案 0 :(得分:10)

使用destroy scaffold不会运行回滚到迁移。这样做的正确方法是

rake db:rollback
rails destroy scaffold level

现在,由于您不再进行其他迁移,因此无法回滚。您需要手动删除该表:

rails dbconsole
DROP TABLE levels;

答案 1 :(得分:1)

我必须做的是:

首先,我按照@Alex Siri指定的步骤进行操作。

但是在使用

之后
rake db:migrate

未将值问题,答案等添加到表中,因此我执行了以下步骤

  1. 我再次使用命令

    删除了脚手架

    rails destroy scaffold level

  2. 之后我再次使用以下命令创建了脚手架:

    rails generate scaffold level question:string answer:string prev_q:integer next_q:integer

  3. 最后我使用

    运行了迁移

    rake db:migrate

  4. 这解决了我的问题。我写了所有的步骤,以便如果其他人有同样的问题,那么他们可以很容易地解决它。