ruby-on-rails - 销毁 Active Record 中的孤立多态关联

标签 ruby-on-rails postgresql polymorphic-associations

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

Notification is created on Comment creation

用户模型:

has_many Notifications, dependent: destroy

因此,负责创建通知的用户仍然有可能删除其帐户,从而使通知记录在一端处于孤立状态。

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

  • 如何防止此问题日后破坏通知系统?
  • 发布此内容后我意识到我误解了多态关联。我实际上已经设置了Notification.notABLE来指向用户创建的评论,而不是用户本身。

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

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

    最佳答案

    1. 修复您的数据

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

    关于ruby-on-rails - 销毁 Active Record 中的孤立多态关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47293935/

    相关文章:

    mysql - SiteController 中的 ActiveRecord::StatementInvalid#create Rails 为所有字段插入空值

    python - 与 Django 一起使用的 virtualenv python3 中的 psycopg2 出现问题

    MySQL - 地理空间对象

    ruby-on-rails - `rake jasmine:ci` 在 c9 上工作,但运行 rake jasmine 会遇到端口和 IP 问题

    ruby-on-rails - Rails 和 ActiveAdmin - 自定义页面上的 flash.now

    ruby-on-rails - 如何在 Ruby on Rails 中使用 jTable?

    java - Hibernate 查询缓存,行为不符合预期

    ruby-on-rails - Active Admin 有一种多态形式

    ruby-on-rails - 将 rails 多态关联对象呈现为 JSON

    ruby-on-rails - has_many :through 的源反射错误