【问题标题】:Rails: Good practice to always use ":dependent => :destroy?"Rails:始终使用“:dependent => :destroy?”的好习惯
【发布时间】:2012-07-02 14:19:50
【问题描述】:

我最近遇到了一个实例,我从数据库中删除了一个用户,但帖子的索引页面损坏了,因为撰写特定帖子的用户不再存在。

这让我想知道总是使用 :dependent => :destroy 是否是一种好习惯?或者是否有一个不那么复杂的替代解决方案来在删除用户时不使整个分页符?我想这更像是一个商业决定,但我认为当用户删除他的帐户时,我不一定要删除所有内容。

我想我可以使用类似的东西

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

但如果必须在每一行中都包含它,那将是一项非常乏味和混乱的任务。

关于这个问题有什么建议/提示吗?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 activerecord associations


    【解决方案1】:

    然后删除用户停用用户,这样您就不会破坏任何关系并且您的数据将保持一致。

    【讨论】:

      【解决方案2】:

      您必须使用dependent: :destroy(或dependent: :delete)或使用deleted_at 列软删除您的用户,然后确定用户范围以检索未删除的用户。

      您可以编写一个SoftDeletable 模块并将其包含在您想要软删除的任何模型中或使用以下其中一种宝石:https://www.ruby-toolbox.com/categories/Active_Record_Soft_Delete

      【讨论】:

        【解决方案3】:

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

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

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

        此外,您可以覆盖用户名的 getter 属性,以便为已删除的用户提供标准名称:

        # author.rb
        def username
          return read_attribute :username if deleted_at.blank?
          "unnamed"
        end
        

        【讨论】:

          猜你喜欢
          • 2011-02-17
          • 2011-08-28
          • 1970-01-01
          • 1970-01-01
          • 2016-10-23
          • 2023-03-14
          • 2011-01-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多