Gmailスタイルを実装する最良の方法は何ですか“元に戻す” Railsで?
-
03-07-2019 - |
質問
" 元に戻す"迷惑なポップアップを表示するのではなく、レコードを破棄するときに「本当によろしいですか"」という方法で gmail 。
これを実装した方法は、「deleted_at」を使用することです destroy メソッドが呼び出されたときにタイムスタンプされるモデルのタイムスタンプ列
def destroy
@foo = Foo.find(params[:id])
@foo.update_attribute(:deleted_at, Time.now)
...
end
元に戻す/元に戻すには、同じ列をnilに設定します
def revert
@foo = Foo.find(params[:id])
@foo.update_attribute(:deleted_at, nil)
...
end
「削除済み」を除外する条件を追加する必要があります; findメソッドを呼び出すとfoos。 「cron」または「バックグラウンドタスク」を設定して、「削除」を実際に破棄することもできます。しばらくしてfoos。
私にとってはうまく機能し、簡単に実装できますが、この機能を実装するより良い方法があるかどうか興味がありますか?たぶん、これを提供するプラグインまたはgemがありますが、私は知りませんか?
解決
実際には、アジャイルWeb開発にあるプラグインがいくつかあります。
説明に一致すると思われるプラグインのリンクと概要は次のとおりです。
- 妄想として行動する:アクティブレコードを「偏執狂」にします。それらを削除しても行は削除されませんが、deleted_atフィールドが設定されます。 Findはオーバーロードされ、削除されたレコードをスキップします。
- ソフト削除可能として機能:ActiveRecordモデルをソフト削除する機能を提供します。
他のヒント
こちらがあるファイル必要なものですが、個人的には、削除されたレコードを特に含めない限り、削除されたレコードを自動的に除外する何かがあるはずです。そうすれば、それらを再インクルードするパラメーターまたは名前付きスコープを含めない限り、本当に削除されたように見えます。
残念ながら、私はそれを書いておらず、暇な時間は限られていますが、それほど難しいことではないでしょうか?
削除したアイテムを別のコレクション(またはテーブルなど)に移動できます。元のリストを見ると、削除されたことがわかり、便利なときに新しいリストを処理できます。
PaperTrail はこれをうまく行います。少し古いですが、良い Railscast があります。 。私はこの質問がかなり前に尋ねられたことを知っていますが、私は好奇心からそれを偶然見つけて、これを行う最新の良い方法を参照するべきだと思いました。
責任チェーンパターン
class Action
{
Perform(context);
Undo(context);
}