Ruby on rails 如何回滚到以前的迁移并删除模式中的表和列?

Ruby on rails 如何回滚到以前的迁移并删除模式中的表和列?,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我正在从事一个Rails 5项目,我在一些表中添加了各种列,并创建了一个新表。这显然创建了一些迁移文件,我希望恢复到某个迁移,并删除在该迁移之后在模式中所做的所有更改。我该怎么做 Schema.rb: ActiveRecord::Schema.define(version: 20180814220216) do create_table "stores", force: :cascade do |t| t.string "name" t.string "address"

我正在从事一个Rails 5项目,我在一些表中添加了各种列,并创建了一个新表。这显然创建了一些迁移文件,我希望恢复到某个迁移,并删除在该迁移之后在模式中所做的所有更改。我该怎么做

Schema.rb:

ActiveRecord::Schema.define(version: 20180814220216) do

  create_table "stores", force: :cascade do |t|
    t.string "name"
    t.string "address"
    t.float "beer_cost"
    t.text "facilities"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.float "latitude"
    t.float "longitude"
    t.boolean "toilet"
    t.string "address_line2"
    t.string "address_line3"
    t.integer "user_id"
    t.integer "toilet_id"
    t.string "toilet_available"
  end

  create_table "toilets", force: :cascade do |t|
    t.string "toilet_available"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

  create_table "users", 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
    t.index ["email"], name: "index_users_on_email", unique: true
    t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
  end

end
运行rails db:migrate:status后的输出

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20180610144440  Create stores
   up     20180611145310  Change datatype beer cost
   up     20180611150425  Delete cig cost column
   up     20180611231832  Add longitude and latitude
   up     20180612194032  Add toilets column
   up     20180614125348  Add address line2 column
   up     20180614133234  Add address line3 column
   up     20180625201708  Devise create users
   up     20180625235156  Add user id to stores
   up     20180626124327  ********** NO FILE **********
   up     20180626124742  ********** NO FILE **********
   up     20180627115344  ********** NO FILE **********
   up     20180627115710  ********** NO FILE **********
   up     20180810102513  ********** NO FILE **********
   up     20180811094301  ********** NO FILE **********
   up     20180814220216  ********** NO FILE **********
您可以使用:
rails db:rollback步骤=您可以使用:

rails db:rollback STEP=您不应该删除迁移,一旦删除它们,就无法回滚。正确的步骤顺序是
rake db:rollback
,然后删除迁移文件


此时,最简单的解决方案是使用
rails db
打开SQL终端,手动删除不需要的列/表,然后
rake db:schema:dump
更新您的
schema.rb

您不应该删除迁移,一旦删除它们,就无法回滚。正确的步骤顺序是
rake db:rollback
,然后删除迁移文件


此时,最简单的解决方案是使用
railsdb
打开一个SQL终端,并手动删除不需要的列/表,然后
rake db:schema:dump
更新您的
schema.rb

可能重复的可能重复我尝试了这个,但是列和表仍然显示在schema@Steve运行
railsdb:migrate
时会复制模式。因此,您可以删除模式,然后使用正确的迁移运行
rails db:migrate
我尝试删除所有我不想要的迁移文件和模式文件,然后运行
rails db:migrate VERSION=20180625235156
生成的模式仍然具有我不想要的所有列和表db:migrate:status
它显示了迁移,然后是我删除迁移文件的
无文件
。模式由ur迁移生成。再检查一遍。如果你不需要数据,你也可以删除并再次创建你的数据库schema@Steve运行
railsdb:migrate
时会复制模式。因此,您可以删除模式,然后使用正确的迁移运行
rails db:migrate
我尝试删除所有我不想要的迁移文件和模式文件,然后运行
rails db:migrate VERSION=20180625235156
生成的模式仍然具有我不想要的所有列和表db:migrate:status
它显示了迁移,然后是我删除迁移文件的
无文件
。模式由ur迁移生成。再检查一遍。如果你不需要数据,你也可以删除并再次创建你的数据库。谢谢。我最终通过rails控制台删除了列和表。但是,当我运行
rails db:migrate:status
时,仍然会收到所有
*******无文件******
消息。有没有办法摆脱它们?从
schema\u versions
表中删除相应的记录。谢谢。我最终通过rails控制台删除了列和表。但是,当我运行
rails db:migrate:status
时,仍然会收到所有
*******无文件******
消息。有没有办法摆脱它们?从
schema\u versions
表中删除相应的记录。