0

假设我有这 4 个模型。
然后我使用acts_as_paranoid为每个模型调用的 gem 来实现逻辑删除。

  • 用户
  • 社区
  • 话题
  • 评论

用户可以随时辞职。这意味着用户的记录将被删除。
在一般情况下,用户创建的社区、主题和评论也应该一起删除。(w/依赖=>销毁)

但是,我不希望那样。因为其他用户可能已将社区添加到他的书签列表中。因此,出于这个原因,它们不应该被删除。

当假设用户记录被删除但所有这些社区、主题和评论仍然存在时,它开始在社区页面或用户所做的任何地方返回 nil 错误。

我现在就这样编码。
由于用户记录消失了,但所有记录仍然存在,因此到处都是零。
我该如何处理这种问题?

意见/社区/show.html.erb

<%= @community.user.username %>

我想要做的是,用这个固定词“未找到用户”替换显示的用户名。然后可能我只是将社区的所有权(user_id)更改为其他用户,以便他可以管理这个社区。

我的协会就是这样。

模型/用户.rb

has_many :communities
has_many :topics
has_many :comments

模型/社区.rb

belongs_to :user
has_many :topics
has_many :comments

模型/topic.rb

belongs_to :user
belongs_to :community
has_many :comments

模型/comment.rb

belongs_to :user
belongs_to :community
belongs_to :topic
4

1 回答 1

1

我认为处理此问题的最佳方法是避免删除,而是将代码放入显示逻辑中以处理已删除的用户。如果你坚持使用acts_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 回答