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

时间:2012-12-17 15:46:15

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

在Rails 3中说,你有一个模型User,因此它的表被称为:users

有些事情发生了可怕的错误,你需要放弃表格,但是你不能因为你有user_id的其他引用。因此,您需要清除users表架构。

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

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

remove_column :users, :col1

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

2 个答案:

答案 0 :(得分:3)

假设您使用

生成了空白迁移

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 }

答案 1 :(得分:0)

在终端中运行rake db:migrate:down VERSION=XXX,它应删除Users表中的所有数据。

然后运行:rake db:migrate