铁轨 破坏 脚手架 叶子 后桌

Posted

技术标签:

【中文标题】铁轨 破坏 脚手架 叶子 后桌【英文标题】:rails destroy scaffold leaves back table 【发布时间】:2014-02-24 14:31:15 【问题描述】:

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

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

我想知道如何更新架构中的级别表。另外我想知道为什么我销毁脚手架时表没有被删除。我需要运行另一个命令吗?

【问题讨论】:

【参考方案1】:

我必须做的是:

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

但是在这样做之后使用

rake db:migrate

没有在表中添加值问题、答案等,所以我做了以下步骤

    我再次使用命令删除了脚手架

    rails destroy scaffold level

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

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

    最后我使用

    进行了迁移

    rake db:migrate

这解决了我的问题。我编写了所有步骤,以便如果其他人有同样的问题,他们可以轻松解决。

【讨论】:

【参考方案2】:

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

rake db:rollback
rails destroy scaffold level

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

rails dbconsole
DROP TABLE levels;

【讨论】:

所以在删除表格后我应该手动添加表格中的所有内容还是只运行rake db:migrate 运行rake db:migrate

以上是关于铁轨 破坏 脚手架 叶子 后桌的主要内容,如果未能解决你的问题,请参考以下文章

Vue脚手架

vue 脚手架简单安装流程

vue脚手架安装报错解决

悬挑结构,外脚手架怎样设置?

Vue脚手架目录详解

盘扣式脚手架该怎样进行搭建和拆除?有啥技术要求呢?