mysql - 在 Rails 迁移中删除表中的所有列

标签 mysql database ruby-on-rails-3 database-migration rails-migrations

假设在 Rails 3 中,您有一个模型 User,因此它的表称为 :users

出现严重错误,您需要删除该表,但您不能删除该表,因为您还有对 user_id 的其他引用。因此,您需要清除您的 users 表架构。

基本上您需要的是一种删除所有列的方法。

如果你的表有超过 40 列,你可以忘记样式

remove_column :users, :col1

您需要一次完成所有操作。在一次迁移中

最佳答案

假设您使用

生成了空白迁移

rails g migration PurgeOldUsersSchema

所以这就是您的迁移应该的样子

class PurgeOldUsersSchema < ActiveRecord::Migration
  def change
    cols = []
    User.columns.collect(&:name).each do |col|
     cols.push(col.to_sym)
    end
    cols = cols - [:id]
    remove_column :users, cols
  end
end

请记住 - [:id] 是必需的,因为 rails 不允许您删除主键。在此数组中,您可以添加要在清除操作后保留的任何列名称。

这使您对该表的引用在架构中保持不变,但无论如何您都会清除数据,因此这并没有太大关系。 :-)

更新

已尝试过此解决方案,但 remove_column :users, cols 对我不起作用,因此我不得不将其替换为:

cols.each { |col| remove_column :users, col }

关于mysql - 在 Rails 迁移中删除表中的所有列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13917333/

相关文章:

mysql - 不存在则插入,存在则更新

java - 保存在 Java 桌面应用程序和网站上使用的个人用户设置的最佳方式

java - 如何在java 7中向CachedRowSet添加列?

ios - Firebase 数据库不等于请求 - 替代解决方案(适用于 iOS)

ruby-on-rails - 将一个数组的每个元素连接到 ruby​​ 中另一个数组的每个元素

mysql - Microsoft SQL 到 MySQL 触发器

php - where 子句中的 MYSQL 别名

database - 什么时候更改数据库后端?

javascript - Rails渲染JS部分打印代码到页面

ruby-on-rails - Rails 3 对象#尝试不工作?