4

最近、データベースからユーザーを削除したときにインスタンスに遭遇しましたが、特定の投稿を書いたユーザーが存在しなくなったため、投稿のインデックス ページが壊れました。

これは、常に :dependent => :destroy? を使用するのが良い習慣であるかどうか疑問に思いました? または、ユーザーが削除されたときに改ページ全体を作成しないためのそれほど複雑ではない代替ソリューションがありますか? それはビジネス上の決定だと思いますが、ユーザーがアカウントを削除するときに、必ずしもすべてのコンテンツを削除したくないと思います。

私は次のようなものを使用できると思います

<%= link_to post.author.username unless post.author.blank? ...... %>

しかし、それをすべての行に含めなければならないのは、非常に面倒で厄介な作業になります。

この問題に関する提案/ヒントはありますか?

4

3 に答える 3

6

ユーザーを削除してユーザーを非アクティブ化するのではなく、この方法で関係を壊さず、データの一貫性を維持できます。

于 2012-07-02T14:32:10.117 に答える
2

dependent: :destroy(またはdependent: :delete) を使用するか、deleted_at列を使用してユーザーを論理的に削除し、削除されていないユーザーを取得するためにユーザーの範囲を指定する必要があります。

モジュールを作成して、SoftDeletableソフト削除するモデルに含めるか、https ://www.ruby-toolbox.com/categories/Active_Record_Soft_Delete のいずれかの gem を使用できます。

于 2012-07-02T14:57:37.627 に答える
1

以上の可能性があると思います。しかし、それはあなたが望むものによります。

個人データを保存している Web サイトが好きではなく、削除してほしいときに削除しない.

ユーザーが自分のデータを保持することに同意する場合は、deleted_at 属性を true に設定できます。ユーザーがそれに同意しない場合は、プロフィールとコメントを削除します。

さらに、ユーザー名の getter 属性をオーバーライドして、削除されたユーザーに標準の名前を付けることができます。

# author.rb
def username
  return read_attribute :username if deleted_at.blank?
  "unnamed"
end
于 2012-07-02T15:41:51.017 に答える