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 。

于 2012-07-02T14:57:37.627 回答
1

我认为有不止一种可能性。但这取决于你想要什么。

我不喜欢存储我的个人数据并且在我希望他们删除它时不要删除它的网站。

如果用户同意保留他的数据,您可以将 deleted_at 属性设置为 true。如果用户对此不满意,请删除他的个人资料和评论。

此外,您可以覆盖用户名的 getter 属性,以获得已删除用户的标准名称:

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