代码之家  ›  专栏  ›  技术社区  ›  Maayan Naveh

依赖::通过关联只破坏到2级

  •  0
  • Maayan Naveh  · 技术社区  · 6 年前

    我有三个模型。一 collection 有很多 searches 通过 items . 当A 收集 被摧毁了,我想要它 项目 被摧毁,但是 搜索 无效,因为它们本身仍然是有效的对象。 能做到吗?

    以下是我的模型:

    class Collection < ApplicationRecord
      has_many :searches, through: :items
      has_many :items
      has_many :searches, through: :suggestions
      has_many :suggestions
    end
    
    class Item < ApplicationRecord
      belongs_to :collection
      belongs_to :search
    end
    
    class Search < ApplicationRecord
      has_many :collections, through: :items
      has_many :items
      has_many :collections, through: :suggestions
      has_many :suggestions
    end
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   davegson    6 年前

    可以 只需删除项目,只需添加 dependent: :destroy has_many :items .

    class Collection < ApplicationRecord
      has_many :searches, through: :items
      has_many :items, dependent: :destroy
    end
    

    销毁集合后,该项将被销毁,但搜索将保留。

    第二个解决方案

    你甚至可以申请 dependent: :nullify has_many :searches -得到同样的结果。

    class Collection < ApplicationRecord
      has_many :searches, through: :items, dependent: :nullify
      has_many :items
    end
    

    the docs :

    collection.delete(对象,_)

    通过将其外键设置为,从集合中删除一个或多个对象 NULL . 如果对象与 从属::销毁 ,如果它们与 dependent: :delete_all .

    如果 :through 使用选项,则默认情况下会删除联接记录(而不是使其无效),但可以指定 从属::销毁 从属::无效 以覆盖此。