0

私は少しピクルスに陥ったようです。ユーザーを破壊する方法を書き込もうとしていますが、それでもコンテンツは保持されます。

現在、私のアプリでは、会社には多くのユーザーがいて、ユーザーは 1 つの会社に属しています。会社は必要に応じてユーザーを非アクティブにすることができますが、会社が終了などの場合にアカウントからユーザーを削除できるようにしたい.

単純に、破棄時に、ユーザーのテーブルで外国の company_id キーを nil に設定するつもりでした。ただし、これを行うと、会社はこの古いユーザーの作業を失うことになります。これは、company_id でクエリを実行することによって情報が入力されるため、あり得ないことです。

同様のDB設計でこれを回避するちょっとした方法を考えた人はいますか? それとも、これをより効果的に行う方法を見つけるために振り出しに戻る必要がありますか?

ありがとう

4

4 に答える 4

3

これは、実際にはデータモデルの問題というよりもインターフェイスの問題です。確かに、ユーザーの情報を保持する必要がある場合は、実際にユーザーを削除/破棄しないでください。ただし、ユーザーを非アクティブにするだけでなく、ユーザーを削除する方法が必要な場合は、「終了」ステータスの別のオプションを追加できます。次に、これらの終了したユーザーをフロントエンドでどのようにどこに表示するかによって異なります(または、表示しない場合もあります)。

于 2011-02-28T21:22:54.997 に答える
3

「ソフト削除」パターンは、おそらく最も単純なアプローチです。このシナリオでは、本質的に「アクティブ」または「削除済み」を意味するブール セマンティクスを持つフィールドを追加します。

既存のコードへの影響を最小限に抑えるために、更新されたスキーマを使用して既存のデータを新しいテーブルにコピーし、削除済みとしてマークされていないレコードのみを含む、古いテーブルと同じ名前のビューを作成できます。「削除された」ユーザーについて知る必要のないクライアントは、幸いなことに、それらのレコードを認識しないままになります。

于 2011-02-28T21:27:07.920 に答える
1

チェックアウトは、削除済みフラグを設定するだけでユーザーのソフト削除を行うパラノイドとして機能する場合があります。このようにして、行は DB に残りますが、一般的なクエリ結果には表示されません。

于 2011-02-28T21:26:21.910 に答える
0

はい、チェックアウトできます

rails3_acts_as_paranoid - 実際にレコードを削除せずに、レコードを非表示にして復元できるようにします。

これは、シナリオに最適な手法です。

于 2012-11-20T21:12:55.580 に答える