0

ユーザーがアイテムを作成するとき、次のような属性:

  • ユーザー名
  • user_email
  • user_crawl

アプリ全体でさらに多くの情報が表示されます。

このアイテムは:dependent => :destroy、ユーザーがアカウントを破棄するとすぐにアプリが停止するわけではないためです。

ユーザーが自分のアカウントを破棄したときに、その属性を保持するにはどうすればよいですか?

:item belongs_to :user
:user has_many :items

アイテムには次のものがあります。

<%= item.user.id%>
<%= image_tag(item.user.avatar) %>
<%= item.user.crawl %>

ユーザーが存在しなくてもアイテムが表示されます。「名前」「ID」「メール」などの属性をビューに保持するにはどうすればよいですか。たとえば、「アイテムは TestUser によって作成されました」、どうにかしてその「TestUser」文字列を保持できますか?

4

2 に答える 2

1

ソフト削除

それを避けるために、通常はユーザー レコードを削除せず、ユーザーのアカウントを削除するソフト デリートで非アクティブ化しuser#passwordますuser#activated_at。そうすれば、データベースの整合性が損なわれないことを確信できます。

もちろん、これにはプライバシーの問題がある可能性があるため、次のことを確認してください。

  • 絶対に必要なデータのみが保持されます (電子メール、住所、電話番号などを削除します)
  • ユーザーがメールなどを受信しないことを再確認します (メールを削除することは良い方法unsubscribedです。通信を望まない登録ユーザー用の属性を設定することもできます。そのため、アカウントを削除したいユーザーには自動的に設定されます)。

プロキシ モデル

別のオプションは、最も重要なデータを別のモデルにグループ化することです。たとえば、次のようになります。

User.has_one :vcard
User.has_many :items, through: :vcard

Item.belongs_to :vcard
Item.has_one :user, through :vcard

Vcard.belongs_to :user
Vcard.has_many :items

AVcardには user nameavatarand crawl(もちろん auser_idは user に属しているため) が含まれます。

それを使用すると、ユーザーを完全に削除できますが、アイテムは関連情報を含む Vcard に関連付けられたままです。ただし、アカウントを削除したいユーザーに親切にするために、おそらくアバターをプレースホルダーに変更する必要があります。

このソリューションは、ユーザー モデルで条件付き検証を回避するのにも役立ちます。

于 2013-10-17T18:45:02.267 に答える