3

同様のアプローチについてstack-overflowを検索しましたが、何も見つからなかったので、ここに私の質問があります:

オブジェクトで破棄が発生したかどうか、および発生した時間を追跡できる必要があります。また、オブジェクト全体が ID だけである必要はありません。

これを行う宝石はありますか、それともデータベースでこれを処理する必要がありますか?

4

2 に答える 2

4

そのためにオブザーバーパターンを使用する必要があります。

モデルを観察するモデルを作成する必要があります。

class AuditObserver < ActiveRecord::Observer
  observe :account

  def after_destroy(account)
    p "#{account.id} destroyed"
  end
end

ここでAuditObserverはモデルを監視しAccount、アカウントが破棄された場合にメッセージを出力します。

config/appplication.rb次のようにオブザーバーを構成 ( )に追加する必要があることに注意してください。

config.active_record.observers = :audit_observer

アップデート

破壊されたオブジェクトを一定期間保持したい場合は、rails3_acts_as_paranoid gem を使用できます。

次に、削除されたアカウントを次のように取得できます。

Account.deleted_after_time(time)

または、新しいモデル ( Audit) を作成して、破棄された ID とタイムスタンプをそのテーブルに挿入することもできます。

于 2012-08-07T10:41:16.123 に答える
1

レコードを保持することを気にしない場合は、パラノイア gemを使用できます。これにより、タイムスタンプが追加deleted_atされ、それを使用してモデルのスコープが設定されるため、削除されたレコードはデフォルトで除外されます。

于 2012-08-07T11:31:58.563 に答える