无法从 rails 应用中删除 schema.rb 中的表

Unable to delete tables in schema.rb from rails app

我使用 Rails 4.0 和 Ruby 2.3.0

我有一个小 Rails 应用程序。起初我想根据 he/she 注册的内容为每个用户分配不同的角色。所以我尝试了 "Royce" gem 来自 https://github.com/MartinJNash/Royce

看到它太复杂,无法满足我的要求后,我卸载了它。

然后我尝试了 "simple-roles" gem 从这里 https://github.com/stanislaw/simple_roles 看它是如何工作的。我也卸载了tat。我 运行 db:migrate 当我的应用程序中有这 2 gem 时。

现在我不想要我的 schema.rb 中这两个 gem 的相应表格。它并没有完全干扰我的应用程序,但我想删除它们。

以下是我的schema.rb文件

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

  # These are extensions that must be enabled in order to support this database
  enable_extension "plpgsql"

  create_table "roles", force: :cascade do |t|
    t.string   "name"
    t.integer  "resource_id"
    t.string   "resource_type"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

add_index "roles", ["name", "resource_type", "resource_id"], name:  "index_roles_on_name_and_resource_type_and_resource_id", using: :btree

add_index "roles", ["name"], name: "index_roles_on_name", using: :btree

  create_table "royce_connector", force: :cascade do |t|
    t.integer  "roleable_id",   null: false
    t.string   "roleable_type", null: false
    t.integer  "role_id",       null: false
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  add_index "royce_connector", ["role_id"], name: "index_royce_connector_on_role_id", using: :btree
  add_index "royce_connector", ["roleable_id", "roleable_type"], name: "index_royce_connector_on_roleable_id_and_roleable_type", using: :btree

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

  add_index "royce_role", ["name"], name: "index_royce_role_on_name", using: :btree

  create_table "sessions", force: :cascade do |t|
    t.string   "session_id", null: false
    t.text     "data"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  add_index "sessions", ["session_id"], name: "index_sessions_on_session_id", unique: true, using: :btree
  add_index "sessions", ["updated_at"], name: "index_sessions_on_updated_at", using: :btree

  create_table "users", force: :cascade do |t|
    t.string   "email"
    t.string   "name"
    t.string   "login_token"
    t.datetime "login_token_valid_until"
    t.datetime "created_at",              null: false
    t.datetime "updated_at",              null: false
  end

  create_table "users_roles", id: false, force: :cascade do |t|
    t.integer "user_id"
    t.integer "role_id"
  end

 add_index "users_roles", ["user_id", "role_id"], name: "index_users_roles_on_user_id_and_role_id", using: :btree

 create_table "vendors", force: :cascade do |t|
    t.string   "name"
    t.datetime "created_at"
    t.datetime "updated_at"
 end

  create_table "visits", force: :cascade do |t|
    t.string   "country"
    t.datetime "visited_at"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

end

即使我已经卸载了 2 个角色-gems,每次我 运行 rake db:migrate,我都会得到上面的模式。

我在我的应用程序中只使用了 "sessions" 和 "vendors" 表格。 知道我应该怎么做才能摆脱这些不需要的表格吗?

查看您的 app/db/migrate 目录。查找并删除与那些 gem 关联的迁移。

删除迁移文件后,您可以再次运行 rake db:migrate。然后 运行 rake db:schema:dump 并检查新生成的 schema.rb 文件以确保您没有为删除的宝石保留任何表格。

首先检查table是否存在...在rails控制台...

##to view all tables 
ActiveRecord::Base.connection.tables

我用rails console直接删除了tables...

    ActiveRecord::Base.connection.execute("drop table table_name")
    ###========OR===============
    ActiveRecord::Migration.drop_table(:table_name)
   ###=========OR===============
   ActiveRecord::Migration.drop_table("table_name")     
   ###=========WITH EXAMPLE===============
   ActiveRecord::Base.connection.drop_table :subscriptions

然后,删除 迁移文件或重命名 再次更改时间戳运行 rake db:migrate

希望对您有所帮助:)