23

私はスクリプト/コンソールで信じられないほど恐ろしい間違いを犯しました:

user.delete

同じスクリプト/コンソール セッション内から元に戻す方法はありますか?

4

3 に答える 3

24

削除されたレコードに引き続きアクセスできる場合は、次のように新しいレプリカを作成できます

User.new(user.attributes_hash).save

これにより、まったく同じ属性(はい、IDも)を持つユーザーが作成され、DBに保存されます。これを使用して、フラッシュを使用した破壊アクションを元に戻します。

警告。メソッドを使用し、モデルがまたはUser#destroyとリレーションを持っている場合、それらの依存レコード (コマンドの実行時に存在する場合) は失われます。もちろん、削除/破棄されたレコードへのアクティブな参照、つまり変数がある場合を除きます。dependent: :destroydependent: :delete

于 2014-11-22T16:55:49.513 に答える
19

方法もわかりません。シェル履歴にまだ情報が残っている可能性があります。(実行するまで上にスクロールするだけですuser.delete)。ユーザーインスタンスを手動で復元できますが、依存関係/関連付けがある場合は注意が必要です。

将来的には、次の方法でサンドボックス モードでコンソールを起動することをお勧めします。

rails console -s

閉じると、すべての変更がロールバックされます。

編集: Arne L.'s Answerを見てください。オブジェクトがまだ利用可能な場合に、ユーザーをデータベースに保存する方法が示されています。これは、私が提案したもの (「ユーザーを手動で復元する」) よりもはるかに優れています。

于 2012-08-14T12:16:24.880 に答える
4

残念だけど違う。変更の履歴を保持している Papertrail のような宝石を使用していない限り、記録はなくなります。

于 2012-08-14T03:10:25.463 に答える