0

私がこれらの4つのモデルを持っていると仮定します。
次に、各モデルに呼び出されるgemを使用して、acts_as_paranoid論理的な削除を実装しています。

  • ユーザー
  • コミュニティ
  • トピック
  • コメント

ユーザーはいつでも辞任できます。これは、ユーザーのレコードが削除されることを意味します。
一般的な状況では、ユーザーが作成したコミュニティ、トピック、コメントも一緒に削除する必要があります。(w /従属=>破棄)

しかし、私はそれを望んでいません。他のユーザーが自分のブックマークリストにコミュニティを追加した可能性があるためです。したがって、このため、削除しないでください。

ユーザーレコードが削除されたが、それらのコミュニティ、トピック、コメントがすべて残っていると仮定すると、コミュニティページまたはユーザーが作成した場所でnilエラーが返され始めます。

私は今このようにコーディングしています。
ユーザーレコードがなくなったが、すべてのレコードが残っているため、どこでもゼロになります。
この種の問題をどのように処理できますか?

views / communitys / show.html.erb

<%= @community.user.username %>

私がやりたいのは、表示されたユーザー名をこの固定単語「NotFoundUser」に置き換えることです。次に、コミュニティの所有権(user_id)を他のユーザーに変更して、代わりにこのコミュニティを管理できるようにします。

私の協会はこんな感じです。

models / user.rb

has_many :communities
has_many :topics
has_many :comments

models / community.rb

belongs_to :user
has_many :topics
has_many :comments

モデル/topic.rb

belongs_to :user
belongs_to :community
has_many :comments

models / comment.rb

belongs_to :user
belongs_to :community
belongs_to :topic
4

1 に答える 1

1

これを処理する最善の方法は、削除を控えて、削除されたユーザーを処理するコードを表示ロジックに入れることだと思います。act_as_paranoid に固執する場合、これは正常に機能します。私が行うことは、次のようなユーザー名のヘルパー メソッドを使用することです。

def community_username(community)
  user = User.with_deleted.find(community.user_id)
  if user.deleted_at.blank?
    return user.username
  end
  "[deleted]"
end

これを適切なヘルパーまたはアプリケーション ヘルパーに入れて、次のようにビューで呼び出すことができます。

<%= community_username(@community) %>

ユーザー名が表示されるか、削除されている場合は [deleted] が表示されます。

上記のコードは私の頭から離れていることに注意してください。acts_as_paranoids メソッドを忘れている場合は、少し調整する必要があるかもしれません...

于 2013-01-22T23:32:35.860 に答える