【问题标题】:Destroy orphaned polymorphic association in Active Record销毁 Active Record 中的孤立多态关联
【发布时间】:2017-11-14 19:38:45
【问题描述】:

我最近在我的 Rails 应用程序中使用多态关联创建了一个通知系统。在系统停止为某些用户显示通知之前,一切都运行良好。我意识到罪魁祸首是一个孤立的通知 - Notification.notifiable_id 返回一个不存在的用户。这是一个图表:

Notification is created on Comment creation

用户模型:

has_many Notifications, dependent: destroy

因此,负责创建通知的用户仍有可能删除他们的帐户,从而使通知记录成为孤立的一方。

问题: 1. 找不到 Notification.notifiable_id 的所有通知如何删除?

  1. 如何防止此问题在未来破坏通知系统?

发布此消息后,我意识到我误解了多态关联。我实际上已经设置 Notification.notifiable 指向用户创建的评论,而不是用户本身。

我通过修改 Comment 模型(以及充当“可通知”的其他模型)修复了问题 #2

    has_many :notifications, as: :notifiable, dependent: :destroy

【问题讨论】:

    标签: ruby-on-rails postgresql polymorphic-associations


    【解决方案1】:
    1. 为了您的数据修复

      Notification.all.each do |notification|
        notification.destroy if notification.notifiable.nil?
      end
      
    2. 您的dependent: :destroy 上似乎缺少一个冒号。当用户记录被销毁时,这会阻止您的通知被正确销毁。

    【讨论】:

    • 酷。谢谢。关于解决问题 2 的任何想法?
    猜你喜欢
    • 1970-01-01
    • 2013-12-25
    • 2014-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多