2016-08-02 43 views
7

我想删除我的模式中的表。当我第一次启动项目时,我创建了数据库,并希望删除该表。这样做的最好方法是什么?从模式删除表 - 导轨

我试过rails g migration drop table :installs但这只是创建一个空迁移?

模式:

create_table "installs", force: :cascade do |t| 
    t.string "email",     default: "", null: false 
    t.string "encrypted_password",  default: "", null: false 
    t.string "reset_password_token" 
    t.datetime "reset_password_sent_at" 
    t.datetime "remember_created_at" 
    t.integer "sign_in_count",   default: 0, null: false 
    t.datetime "current_sign_in_at" 
    t.datetime "last_sign_in_at" 
    t.string "current_sign_in_ip" 
    t.string "last_sign_in_ip" 
    t.datetime "created_at",       null: false 
    t.datetime "updated_at",       null: false 
    end 

add_index "installs", ["email"], name: "index_installs_on_email", unique: true 
add_index "installs", ["reset_password_token"], name: "index_installs_on_reset_password_token", unique: true 
+2

可能重复的[Rails数据库迁移 - 如何删除表?](http://stackoverflow.com/questions/4020131/rails-db-migration-how-to-drop-a-table) –

+0

我' d说它不是重复的,因为这是一个关于模式的问题(即使这不是应该编辑的内容)。 – jonlink

回答

21

如果通过运行创建一个空迁移:
rails g migration DropInstalls
或:
rails generate migration DropInstalls

然后,您可以添加到该空此迁移:

class DropInstalls < ActiveRecord::Migration 
    def change 
    drop_table :installs 
    end 
end 

然后在命令行应删除已安装表

+1

如果这个答案指出模式是一个自动生成的文件,并且因此是错误的,那么这个答案会更加完整。 – jonlink

4

运行rake db:migrate我觉得这是最容易使用的Rails的控制台解决这个问题。假设您想从博客应用程序中删除“评论”表。您可以通过从命令行(例如终端)执行以下任务来完成此操作。

步骤一:

$ rails console 

第二步:

$ ActiveRecord::Migration.drop_table(:comments) 

步骤三:

$ rake db:migrate 

去检查你的schema.rb看到,该表已被删除。

+4

这是一个非常糟糕的建议。如果您手动执行此操作,您的生产应用程序将无法知道该表需要被删除,并且您将不同步,这可能会导致很多问题。正确的答案是使用迁移来删除表。 – brainbag