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