Devise と paranoia(acts_as_paranoid) gem には複雑な問題があります。私の User モデルは比較的単純です。
class User < AR::Base
devise :confirmable, :other_config_options
acts_as_paranoid
end
確認可能なオプションなしで、最初に Devise gem を追加しました。その後、この移行で確認可能なオプションを後で追加しました。
def up
add_column :users, :confirmed_at, :datetime
add_column :users, :confirmation_token, :string
add_column :users, :confirmation_sent_at, :datetime
add_column :users, :unconfirmed_email, :string
add_index :users, :confirmation_token, unique: true
User.update_all(:confirmed_at => Time.now)
end
ここまでは問題ありません。次に、Paranoia gem とacts_as_paranoid
ラインを User モデルに追加しました。データベースは現在の状態で問題ありませんが、データベースをリセットして本番データと同期しようとしていますが、ここで問題が発生しています。db:reset を実行すると、上記の移行に失敗します。
PG::UndefinedColumn: ERROR: column users.deleted_at does not exist
acts_as_paranoid
問題は、現在のデータベース スナップショットでのみ有効なディレクティブがモデルに含まれていることです。User::deleted_at
存在しない以前のデータベース スナップショットにロールバックすると、paranoia gem は削除されていないオブジェクトのみを更新しようとし、クエリは失敗します。
この状況を処理するエレガントな方法について何か考えはありますか?