无法从 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
希望对您有所帮助:)
我使用 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
希望对您有所帮助:)