ruby-on-rails - rails destroy scaffold leaves 后 table

标签 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

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

最佳答案

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

rake db:rollback
rails destroy scaffold level

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

rails dbconsole
DROP TABLE levels;

关于ruby-on-rails - rails destroy scaffold leaves 后 table ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21487817/

相关文章:

ruby - 纯 ruby 类的验证

ruby-on-rails - 在 Active Record 回调中验证日语字符

ruby-on-rails-3 - 对非属性使用 Ransack sort_link

html - 在 rails 4.2.4 的布局文件夹中产生的不同标题元素

ruby-on-rails - Rspec 和 Capybara , visit 和 get 有什么区别

sql - 使用 ActiveRecord 获取一系列有条件的计数

ruby-on-rails - Rails - 一个 View 中的多个模型

ruby-on-rails-3 - 如何删除 Devise 注册路线?

ruby-on-rails-3 - ActiveRecord Rails 3 范围与类方法

ruby-on-rails - 在 rails 2.3.18 中使用邮件 gem 发送邮件