同様のアプローチについてstack-overflowを検索しましたが、何も見つからなかったので、ここに私の質問があります:
オブジェクトで破棄が発生したかどうか、および発生した時間を追跡できる必要があります。また、オブジェクト全体が ID だけである必要はありません。
これを行う宝石はありますか、それともデータベースでこれを処理する必要がありますか?
同様のアプローチについてstack-overflowを検索しましたが、何も見つからなかったので、ここに私の質問があります:
オブジェクトで破棄が発生したかどうか、および発生した時間を追跡できる必要があります。また、オブジェクト全体が ID だけである必要はありません。
これを行う宝石はありますか、それともデータベースでこれを処理する必要がありますか?
そのためにオブザーバーパターンを使用する必要があります。
モデルを観察するモデルを作成する必要があります。
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 とタイムスタンプをそのテーブルに挿入することもできます。
レコードを保持することを気にしない場合は、パラノイア gemを使用できます。これにより、タイムスタンプが追加deleted_at
され、それを使用してモデルのスコープが設定されるため、削除されたレコードはデフォルトで除外されます。