1

Rails 3で言うと、モデルがUserあり、そのテーブルは次のように呼ばれます。:users

何かがひどく間違っていて、テーブルを削除する必要がありますが、。への他の参照があるため、削除できませんuser_idusersしたがって、テーブルスキーマをクリアする必要があります。

基本的に必要なのは、すべての列を削除する方法です。

テーブルに40を超える列がある場合、スタイルを忘れることができます

remove_column :users, :col1

あなたはそれをすべて一度に行う必要があります。1回の移行で

4

2 に答える 2

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 }
于 2012-12-17T15:46:14.567 に答える
0

ターミナルで実行rake db:migrate:down VERSION=XXXすると、Usersテーブルのすべてのデータが削除されます。

そして、実行します:rake db:migrate

于 2012-12-17T16:12:39.020 に答える